2011-03-15 83 views
0

在使用基於BaseAdapter的自定義ListView時,如何爲上下文菜單註冊ListView?我試過registerForContextMenu(getListView());,但這似乎不起作用。我使用API​​ Demos中的ListView14.java。如何實現自定義ListView的上下文菜單?

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setListAdapter(new EfficientAdapter(this)); 
    registerForContextMenu(getListView()); 
} 




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

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    switch (item.getItemId()) { 
    case R.id.tagView: 
    // editNote(info.id); 
    return true; 
    case R.id.tagRename: 
    // deleteNote(info.id); 
    return true; 
    case R.id.tagDelete: 
     // deleteNote(info.id); 
     return true; 
    default: 
    return super.onContextItemSelected(item); 
    } 
} 

回答

1

而不是使用registerForContextMenu(getListView()),儘量命名中的onCreate您的ListView和使用參考:

Listview myListView = (Listview) findViewById(R.id.myListView); //or use any other constructor 
registerForContextMenu(myListView); 

這適用於在我的適配器餵養的GridView的所有項目(雖然它的轉向了是不可能的然後正確地向gridview本身添加一個contextmenu,它在空的gridview項目上註冊longclicks,但這完全是另一個故事:)),我想象一個Listview的工作原理是一樣的。