Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在Adapter getView中使用之前,如何检查视图的类型是否合适_Android_Listview_Android Listview_Android Arrayadapter_Findviewbyid - Fatal编程技术网

Android 在Adapter getView中使用之前,如何检查视图的类型是否合适

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; } //... } 而且有时会向用户

我正在使用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 {

}
}