【问题标题】:TextView inside of Spinner show com.jeanjn.guiadeacademiaSpinner 显示 com.jeanjn.guiadeacademia 内的 TextView
【发布时间】:2014-04-27 12:54:49
【问题描述】:

我正在尝试使用自定义 ArrayAdapter 填充微调器。我认为微调器已正常填充,但是当应用程序尝试打开它时,微调器显示 com.jeanjn.guiadeacademia....,但要显示我在 getView(...)

Obs:对不起,我的英语不太好。

Obs2:我用 ListView 做到了,而且效果很好。现在有了 Spinner...

我的代码:

private void carregarSpinner() {
    Spinner spinner = (Spinner) findViewById(R.id.CateSpinner);
    DataBase db = new DataBase(this); 
    Cursor cursor = db.getData("SELECT * FROM Categoria");
    ArrayList<Categoria> txts = new ArrayList<Categoria>();
    while(cursor.moveToNext())
    {
        Categoria ex = new Categoria();
        ex.setNome(cursor.getString(1));
        ex.setId(cursor.getInt(0));
        txts.add(ex);
    }
    AdapterCategoria adapter = new AdapterCategoria(this, txts);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);
    spinner.setOnItemSelectedListener(this);
    db.closeDB(cursor);
}


public class AdapterCategoria extends ArrayAdapter<Categoria> {

    private final Context context;
    private final ArrayList<Categoria> itemsArrayList;

    public AdapterCategoria(Context context, ArrayList<Categoria> itemsArrayList) {

        super(context, R.id.txvCategoria, itemsArrayList);

        this.context = context;
        this.itemsArrayList = itemsArrayList;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        // 1. Create inflater 
        LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        // 2. Get rowView from inflater
        View rowView = inflater.inflate(R.layout.categoria_model, parent, false);

        // 3. Get the two text view from the rowView
        TextView labelView = (TextView) rowView.findViewById(R.id.txvCategoria);

        // 4. Set the text for textView 
        labelView.setText(itemsArrayList.get(position).getNome());
        labelView.setTag(itemsArrayList.get(position).getId());

        // 5. retrn rowView
        return rowView;
    }

【问题讨论】:

    标签: android textview spinner android-arrayadapter


    【解决方案1】:

    ArrayAdapter 中的 getDropDownView 方法期望 items 对象是 CharSequence 的实例,否则会将 item.toString() 设置为 Textview。这就是您在微调器下拉项目中看到class name (com.jeanjn.guiadeacademia) 的原因

    由于您的项目对象是 Categoria ,您需要覆盖 getDropDownView 并提供这样的自定义视图,

    @Override
    public View getDropDownView(int position, View convertView,ViewGroup parent) {
            TextView row = (TextView) super.getView(position, convertView, parent);
            row.setText(getItem(position).getNome());
            return row;
    }
    

    另外,将您的自定义适配器超级构造函数调用更改为

    super(context, R.layout.categoria_model, R.id.txvCategoria,itemsArrayList);
    

    其中 R.layout.categoria_model 是自定义布局,R.id.txvCategoria 是布局中的文本视图

    【讨论】:

    • 谢谢,但不是。我解决了覆盖类中的 toString() 方法。
    猜你喜欢
    • 2017-04-05
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    相关资源
    最近更新 更多