我有一个CursorAdapter与newView()和bindView()覆盖。问题是bindView()没有正确映射到由newView()创建的视图。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元素。没什么特别的。我在newView()中放置了一个显示视图标记集的bindView()日志。日志显示bindView()在调用时不会获得所需的视图。
我认为,当bindView()被调用时,它绑定到现有的视图,如果有任何内存效率。所以我认为bindView会获得一个可能由row _ID标识的特定视图。但它似乎在被调用时,它只能获得任何现有的视图。
如何让bindView在视图可以有不同的布局时获取具有特定布局的指定视图?
谢谢你的建议。我认为这是解决问题的方法。我有另一个问题。 getItemViewType何时调用与newView有关? – seongjoo 2013-05-02 05:00:24
@seongjoo - 在任何视图被夸大之前调用'getItemViewType'。流程是'getItemViewType'(确定是否将一个非空的'convertView'传递给'getView') - >'getView' - >(如果'convertView == null' then'newView') - >'bindView' – ianhanniballake 2013-05-02 05:22:50
'覆盖getViewTypeCount'解决了我花了2个小时的问题 – 2016-10-16 09:38:37