2011-09-03 50 views
3

我試圖通過這本書從Android開發文檔這樣做:幾乎完全爲http://developer.android.com/guide/topics/ui/menus.html#context-menuAdapterContextMenuInfo總是空

// this didn't create a menu, i don't know why 
//registerForContextMenu(getListView()); 

setListAdapter(new ArrayAdapter<Note>(this, R.layout.selectset_listitem) { 
    @Override 

    protected View getView(...) { 
     ... custom layout ... 

     // this creates a menu, but... 
     registerForContextMenu(convertView); 

     return convertView; 
    } 
} 

而且onCreateContextMenuonContextItemSelected

這裏是它的外觀的文檔(和我的代碼):

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
           ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.context_menu, menu); 
} 

但是這部分總是給我一個空的信息:

public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    ... 
} 

是真正獨特的唯一事情是我有一個列表項目的自定義佈局(即幾個文本字段和圖像)。有什麼我需要做的是能夠獲得上下文菜單的內置項目的索引?

+0

你說onCreateContextMenu是「幾乎」一模一樣,什麼區別?你可以發佈該方法嗎? – Jack

+0

該方法與文檔中的完全相同。 – leech

+0

無論如何貼吧...... – Jack

回答

4

您需要在ListView的活動中調用registerForContextMenu(),而不是在適配器中查看項目。

+3

recyclerview的似乎沒有這樣的。你知道的任何解決方法? – eipipuz

4

getMenuInfo()可以工作在ListAdapter,而不是意見。

但是,您可以將其他數據與視圖的標記一起傳遞。

在getView

:vi.setTag(位置)activity.registerForContextMenu(ⅵ);

在Activity中聲明private int id;

onCreateContextMenu:ID =(int)的v.getTag();

onContextItemSelected:你可以使用id