我有CustomAdapter扩展ArrayAdapter,其中我在LinearLayout中设置了一些视图 - 一行,像这样(适配器):
public View getView(int position, View convertView, ViewGroup parent) {
. . .
ImageView statePic = (ImageView) view.findViewById(R.id.state);
statePic.setImageResource(R.drawable.light_green);
return view;
}
这很好用。但是现在我想在列表中的项目上绑定一个上下文菜单,所以我有这样的东西(主要活动 - listActivity):
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
switch(item.getItemId()){
case CM_START:
View view = getListAdapter().getView(info.position, null, null);
ImageView statePic = (ImageView)view.findViewById(R.id.state);
// I'm sure this view is the right one
statePic.setImageResource(R.drawable.light_grey);
view.invalidate();
view.refreshDrawableState();
return true;
case CM_STOP:
return true;
}
return super.onContextItemSelected(item);
}
我希望使用此代码片段来更改该项目中的图像,但这不起作用(视图不会使用新值刷新)。我怎么能这样做?
答案 0 :(得分:0)
您应该使用AdapterContextMenuInfo类的targetView属性:
...
ImageView statePic = (ImageView) info.targetView.findViewById(R.id.state);
...