0

ArrayAdapterを拡張するCustomAdapterがあり、LinearLayout内にいくつかのビューを設定しています-1行は次のようになります(アダプター):

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);
}

このスニペットで実現したいのは、そのアイテムの画像を変更することですが、これは機能しません(ビューは新しい値で更新されません)。どうやってやるの?

4

1 に答える 1

0

AdapterContextMenuInfoクラスのtargetViewプロパティを使用する必要があります。

...
ImageView statePic = (ImageView) info.targetView.findViewById(R.id.state);
...
于 2012-07-02T22:02:35.483 に答える