如何在使用适配器getView之前检查视图是否是合适的类型

时间:2015-07-08 10:18:01

标签: android listview android-listview android-arrayadapter findviewbyid

我使用Adapter有3种Views

public class MyAdapter extends ArrayAdapter<MyClass> {
    @Override
    public int getViewTypeCount() {
        return 3;
    }

    //...
}

似乎有时将错误类型的视图传递给getView。确实是文档警告它:

  

注意:在使用之前,您应该检查此视图是否为非null且类型是否合适。

在使用之前,我应该如何检查视图是否属于合适类型?

我应该findViewById检查它是否包含来自适当xml的id?但它是否真的检查&#34;如果视图属于合适的类型&#34;?

编辑:到目前为止,答案似乎不会错过我的问题,以澄清: 是的,我使用的是getItemViewType,但由于我有3种类型的观看次数,因此getView中的convertView有时会出现错误的类型(而不是为{{1}充气的视图})并且无法转换为正确的 - 问题不在于如何检查应该返回哪个视图(并且这由&#34; bigdestroyer&#34;答案覆盖),但是如果View传递给getView可以重复使用(在我的情况下,它不能)。

2 个答案:

答案 0 :(得分:2)

&#34;适当的类型&#34;表示您必须在getView方法中检入convertView的类型才能返回自定义View或其他自定义getItemViewType

您可以覆盖BaseAdapter的{​​{1}}方法。例如:

public int getItemViewType(int position) {

      MyItem item = getItem(position);
      return item.getViewType();

}

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

     int viewType = getItemViewType(position);

     if (convertView != null) {

         if (viewType == 1) return recycleViewOfType1(position, convertView);
         if (viewType == 2) return recycleViewOfType2(position, convertView);

     }

     else {

         if (viewType == 1) return newViewOfType1(position);
         if (viewType == 2) return newViewOfType2(position);

     }

         return null;         
}

答案 1 :(得分:0)

getItemViewType()方法中创建/重复使用视图之前,您可以使用getView()方法确定视图类型。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
int type = getItemViewType(position);

if(type == 1){

}else {

}
}

查看this教程了解更多信息