2013-09-28 96 views
2

您好我有一個從ContextMenu獲取ExpandableListView項目的id的問題,我需要從我的數據庫(使用內容提供者)刪除條目。從ContextMenu獲取ExpandableListView的選定項目

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    menu.add(Menu.NONE, MENU_EDIT, Menu.NONE, "Edit"); 
    menu.add(Menu.NONE, MENU_REMOVE, Menu.NONE, "Remove"); 
} 

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) menuItem.getMenuInfo(); 
    switch (item.getItemId()) { 
     case MENU_EDIT: 
      editEntry(info.id); 
      return true; 
     case MENU_REMOVE: 
      deleteEntry(info.id); 
      return true; 
     default: 
      return super.onContextItemSelected(item); 
    } 
} 

private void deleteEntry(long id) { 
    Uri uri = Uri.parse(DatabaseManager.CONTENT_URI + "/" + id); 
    getActivity().getContentResolver().delete(uri, null, null); 
} 

的文本菜單正顯示出,但是當我點擊「刪除」什麼也沒有發生。你能告訴我該怎麼辦?

+0

你沒有看到從'ListView'和/或供應商刪除的項目?你有沒有跟蹤你的提供者在觸發'delete()'時發生了什麼?您可能還想發佈提供商的刪除方法。 – Luksprog

+0

它工作得很好用的ListView – keysersoze

+0

哦,我忘了我的適配器上調用notifydatasetchanged - 該項目確實刪除,但...它不是我點擊的項目。當我嘗試刪除組中的最後一項時,它將刪除組中的第一項。爲什麼? – keysersoze

回答

4

因爲ExpandableListView有兩個級別 - 組和子級 - 「ID」很難直接解釋。

您需要將ExpandableListContextMenuInfo中的信息分解爲組位置和子位置。

使用這兩個值,您可以從適配器中檢索選定的項目(這裏是this.exandableListAdapter),您將其用作ExpandableListView的數據源。對象適配器的getChild()回報可以轉換到任何(自定義),鍵入您最初投入的適配器:

ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) menuItem.getMenuInfo(); 
int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition); 
int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition); 
MyItemClass item =(MyItemClass) this.expandableListAdapter.getChild(groupPos, childPos); 

從這個項目你應該很容易能夠得到的ID在你的數據庫或您需要的任何特定信息。

相關問題