【问题标题】:Android Spinner: Custom Adapter DisplayAndroid Spinner:自定义适配器显示
【发布时间】:2014-01-27 15:10:56
【问题描述】:

我在微调器上使用 SimpleCursorAdapter,因为我想创建一个包含多行的自定义 dropDownList 并从我的数据库中填充它。我已经很好地完成了这项任务,但是在我的布局活动中,微调器显示了选定的行,我希望它有一个单独的布局,因此它只显示选定行的第一行。我怎样才能做到这一点?

String fields[] = {"name", "lovibond", "gravity"};
    nameAdapter = new GrainSpinnerAdapter(this, R.layout.grain_spinner_row, data, fields, new int[] { R.id.GrainSpinnerName, R.id.GrainSpinnerLovibond, R.id.GrainSpinnerGravity });
    nameSpinner.setAdapter(nameAdapter);

这是我的 SimpleCursorAdapter 代码:

public class GrainSpinnerAdapter extends SimpleCursorAdapter {

    private Context myContext;

    public GrainSpinnerAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
        super(context, layout, c, from, to);
        myContext = context;
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        super.bindView(view, context, cursor);

        int nameColumn = cursor.getColumnIndex("name");
        String getName = cursor.getString(nameColumn);
        TextView name = (TextView)view.findViewById(R.id.GrainSpinnerName);
        name.setText(getName);

    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        super.newView(context, cursor, parent);
        View view = View.inflate(context, R.layout.grain_spinner, null);
        return view;
    }

    @Override
    public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) {
        super.newDropDownView(context, cursor, parent);

        View view = View.inflate(context, R.layout.grain_spinner_row, null);
        int nameColumn = cursor.getColumnIndex("name");
        String getName = cursor.getString(nameColumn);
        TextView name = (TextView)view.findViewById(R.id.GrainSpinnerName);
        name.setText(getName);

        int loviColumn = cursor.getColumnIndex("lovibond");
        String getLovi = cursor.getString(loviColumn);
        TextView lovi = (TextView)view.findViewById(R.id.GrainSpinnerLovibond);
        lovi.setText(getLovi);

        int gravityColumn = cursor.getColumnIndex("gravity");
        String getGravity = cursor.getString(gravityColumn);
        TextView gravity = (TextView)view.findViewById(R.id.GrainSpinnerGravity);
        gravity.setText(getGravity);

        return view;
    }

【问题讨论】:

  • 完全在一个侧面,这个应用程序是自制的吗? :)

标签: android spinner simplecursoradapter


【解决方案1】:

我认为您要问的是BaseAdapter 类的getDropDownView() 方法。

在您的 newView 方法中执行您已完成的操作并为单行显示提供布局。

然后实现 newDropDownView 来膨胀另一个提供多行的布局。 下拉视图用于在用户选择下拉菜单时提供的弹出菜单中创建行。

【讨论】:

  • 我更新了我的问题以包括新实现的 newDropDownView,但它抛出了一个错误。实际上,我以前曾尝试过一次,但没有运气。我可能错过了一些非常简单的东西......
  • 弄清楚并更新了我的问题。我需要在 newDropDownView 中绑定我的对象,并在 newView 中使用自定义布局,同时在 bindView 中绑定其对象。
猜你喜欢
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
  • 2015-09-07
  • 2015-04-27
  • 1970-01-01
相关资源
最近更新 更多