我想清楚我的想法是什么时候运行bindView。
我已经看到很多解决方案通常会搜索列表视图中的所有元素, (假设它是3:1 ImageView和2 TextViews),然后简单地在每个上应用想要的方法。 (天气它的setText / setImageResource)
但我认为bindView(View v...)
针对特定行设置newView时为每个元素运行,这意味着v
正是您想要的元素!
这意味着优化的解决方案不像我常见的那样findViewById
,而是看看你在切换案例场景中的位置:
public void bindView(View view, Context context, Cursor c) {
switch (view.getId()){
case R.id.listImageViewPlace:
((ImageView)view).setImgResource(...);
break;
case R.id.tvListItemName:
((TextView)view).setText(c.getString(c.getColumnIndex(PlacesDBHelper.NAME_COL)));
break;
case R.id.tvListDistance:
...
break;
}
}
虽然我主要看到的解决方案是:
public void bindView(View view, Context context, Cursor c) {
ImageView img = ((ImageView)view.findViewById(R.id.imgView)).setImgResource(...);
TextView tv = ((TextView)view.findViewById(R.id.tv)).setText(...);
}
每次bindView
不在您要设置的特定视图上时,最后一个代码都有很多空白工具。
我弄错了什么?