【发布时间】:2015-07-08 10:18:01
【问题描述】:
我正在使用 Adapter 和 3 种类型的 Views
public class MyAdapter extends ArrayAdapter<MyClass> {
@Override
public int getViewTypeCount() {
return 3;
}
//...
}
似乎有时会将错误类型的视图传递给getView。 Indeed 文档对此提出了警告:
注意:您应该在使用前检查此视图是否为非空且类型合适。
在使用之前我应该如何检查视图是否属于合适的类型?
我是否应该通过findViewById 检查它是否包含来自适当xml 的一些ID?但它真的会检查“视图是否属于适当的类型”吗?
编辑:到目前为止的答案似乎没有错过我的问题,以便澄清:
是的,我正在使用getItemViewType,但由于我有 3 种类型的视图,所以有时getView 中的convertView 类型错误(不是为getItemViewType 膨胀的视图)并且无法转换为正确的类型- 问题不在于如何检查应该返回哪个视图(这由“bigdestroyer”答案涵盖),而是是否可以重用传递给 getView 的视图(在我的情况下它不能)。
【问题讨论】:
-
嗯,如果
convertView != null,可以重复使用。为什么你说在你的情况下它不能? -
不,因为我弄错了 View as convertView。如果您查看learnncode.co/2014/01/21/…,例如对于 VIEW_TYPE_TEXT,我得到的是 R.layout.view_row_type_two 而不是 R.layout.view_row_type_one。
-
我现在明白了。真奇怪,能把你所有的适配器代码都显示出来吗?
-
哈,我可能知道出了什么问题,我使用的是github.com/beworker/pinned-section-listview,而不是现有的 Android ListView,而且它似乎有这个错误,无论如何感谢 bigdestroyer,因为感谢你的提示,我知道我做对了这是别人的错:)
-
不错!希望你能解决^^
标签: android listview android-listview android-arrayadapter findviewbyid