Android 在Adapter getView中使用之前,如何检查视图的类型是否合适
我正在使用3种类型的Android 在Adapter getView中使用之前,如何检查视图的类型是否合适,android,listview,android-listview,android-arrayadapter,findviewbyid,Android,Listview,Android Listview,Android Arrayadapter,Findviewbyid,我正在使用3种类型的视图 public class MyAdapter extends ArrayAdapter<MyClass> { @Override public int getViewTypeCount() { return 3; } //... } 公共类MyAdapter扩展了ArrayAdapter{ @凌驾 public int getViewTypeCount(){ 返回3; } //... } 而且有时会向用户
视图
public class MyAdapter extends ArrayAdapter<MyClass> {
@Override
public int getViewTypeCount() {
return 3;
}
//...
}
公共类MyAdapter扩展了ArrayAdapter{
@凌驾
public int getViewTypeCount(){
返回3;
}
//...
}
而且有时会向用户传递错误类型的视图。事实上,医生们对此提出了警告:
注意:在使用之前,您应该检查此视图是否为非null且类型是否合适
在使用前,我应该如何检查视图的类型是否合适?
我是否应该检查它是否包含来自适当xml的id?但它真的检查“视图是否属于适当的类型”吗
编辑:迄今为止的答案似乎没有遗漏我的问题,因此需要澄清:
是的,我使用的是getItemViewType
,但由于我有3种类型的视图,因此中的convertView
有时有错误的类型(不是为getItemViewType
而膨胀的视图),无法转换为正确的视图-问题不在于如何检查应该返回哪个视图(这在“bigdestroyer”回答),但如果传递给getView的视图可以重用(在我的情况下不能重用)。“适当的类型”意味着您必须在getView
方法中签入convertView
的类型,以便返回自定义的视图或其他视图
您可以覆盖BaseAdapter
的getItemViewType
方法。例如:
public int getItemViewType(int position) {
MyItem item = getItem(position);
return item.getViewType();
}
以及:
在getView()
方法中创建/重用视图之前,可以使用getItemViewType()
方法确定视图类型
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int type = getItemViewType(position);
if(type == 1){
}else {
}
}
查看教程了解更多信息您可以查看我对问题的编辑,因为我认为这不是答案。如果convertView!=null
,它可以重复使用。为什么您说在您的情况下它不能重复使用?不,因为我将错误的视图视为convertView。如果您查看视图类型文本,我将得到R.layout.View行类型wo而不是R.layout.view\u row\u type\u one。我现在明白了。这很奇怪,你能显示你所有的适配器代码吗?哈,我可能知道出了什么问题,我使用的不是股票Android ListView,它似乎有这个bug,无论如何,谢谢bigdestroyer,因为多亏了你的提示,我知道我做得对,这是别人的错:)很好!我希望是你你能解决吗^^
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int type = getItemViewType(position);
if(type == 1){
}else {
}
}