我有一个带有newView()和重写的bindView()的CursorAdapter。问题是bindView()没有正确映射到newView()创建的视图。
newView()根据游标值返回从不同布局中膨胀的两个不同视图,如下所示。
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent){
View view = null;
int who = //... get a value from cursor
switch(who){
case 0:
view = LayoutInflater.from(context).inflate(R.layout.first, null);
view.setTag("case 0"); // for bindView() mapping inspection
break;
case 1:
view = LayoutInflater.from(context).inflater(R.layout.second, null);
view.setTag("case 1"); // for bindView() mapping inspection
break;
default:
break;
}
return view;
}
然后,bindView()就像往常一样。从游标获取值并将值设置为从newView()返回的视图中的UI元素。没什么特别的。我放置了一个登录bindView(),显示了newView()中视图的标记集。 Log显示bindView()在调用时没有获得所需的视图。
我认为当调用bindView()时,如果有内存效率,它会绑定到现有视图。所以我认为bindView获取了一个可能由行_ID标识的特定视图。但似乎当它被调用时,它只会获得任何现有视图。
当视图可以有不同的布局时,如何让bindView获取具有特定布局的指定视图?
答案 0 :(得分:3)
默认情况下,ListView中的所有项目都被视为相同的视图类型。您可以覆盖getItemViewType以根据位置返回不同的值。然后,视图将仅重用于相同的项目视图类型。
您还要覆盖getViewTypeCount,否则getItemViewType
将无效。