我有一个覆盖了 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() 中设置的视图标签。日志显示 bindView() 在调用时没有获得所需的视图。
我认为当调用 bindView() 时,如果有任何内存效率,它会绑定到现有视图。所以我认为 bindView 获得了一个特定的视图,可能由行 _ID 标识。但似乎当它被调用时,它只会获得任何现有的视图。
当视图可以具有不同的布局时,如何使 bindView 获取具有特定布局的指定视图?