2012-07-02 2 views
0

У меня есть CustomAdapter расширения ArrayAdapter, в котором я установить некоторые взгляды внутри LinearLayout - один ряд, как этот (адаптер):Как изменить свойство вида в CustomAdapter?

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

Пожалуйста, используйте 'андроида-listview' тег вместо' listview' :) –

+0

хорошо, жаль об этом :-) – shmoula

+0

Что именно делает не работа? Не связано ли привязка ContextMenu или изменение ресурса в ImageView? –

ответ

0

Вы должны использовать свойство targetView класса AdapterContextMenuInfo:

... 
ImageView statePic = (ImageView) info.targetView.findViewById(R.id.state); 
... 
+0

Это сделало трюк! Спасибо! – shmoula

Смежные вопросы