我使用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可以重复使用(在我的情况下,它不能)。
答案 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教程了解更多信息