2013-09-28 2 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); 
} 

ContextMenu가 표시되지만 '제거'를 클릭해도 아무런 변화가 없습니다. 내가 뭘해야하는지 말해 줄래?

+0

'ListView'또는/및 제공자에서 삭제 된 항목이 보이지 않습니까? 'delete()'를 트리거 할 때 공급자에서 일어나는 일을 추적 해 봤나? 공급자의 삭제 방법을 게시 할 수도 있습니다. – Luksprog

+0

ListView에서 잘 작동했습니다. – keysersoze

+0

아, 어댑터에서 notifydatasetchanged를 호출하는 것을 잊었습니다. 실제로 항목이 삭제되었지만 클릭 한 항목이 아닙니다. 그룹에서 마지막 항목을 삭제하려고하면 그룹에서 첫 번째 항목을 삭제합니다. 왜? – keysersoze

답변

4

ExpandableListView에는 그룹과 하위의 두 가지 수준이 있으므로 "ID"는 직접 해석하기가 어렵습니다.

정보를 ExpandableListContextMenuInfo에서 그룹 위치 및 하위 위치로 분해해야합니다.

이 두 값을 사용하면 ExpandableListView의 데이터 소스로 사용한 어댑터 (여기 this.exandableListAdapter)에서 선택한 항목을 검색 할 수 있습니다. 개체는 어댑터의 getChild()는 반환이 어떤 (사용자 정의)으로 변환 할 수 있습니다 처음 어댑터에 넣어 입력하는 것이 : 당신은 쉽게에서 ID를 얻을 수 있어야이 항목에서

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

당신의 데이터베이스 또는 필요한 특정 정보.

관련 문제