【发布时间】:2013-04-26 04:15:23
【问题描述】:
我有一个 CursorAdapter 重写了 newView() 和 bindView()。问题是 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 获取具有特定布局的指定视图?
【问题讨论】:
标签: android android-cursoradapter