2011-04-06 7 views
1

Listview에 목록을 표시하는 데 사용되는 ListAdapter이 있습니다. 이제 선택한 항목을 삭제하기위한 긴 프레스 메뉴 조치가 추가되었습니다.Android ListAdapter가 업데이트되지 않습니다

public boolean onContextItemSelected(MenuItem item) { 

     AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item 
       .getMenuInfo(); 
     final Long wordId = menuInfo.id; 
     // selected_row = menuInfo.position; 

     // To get the id of the clicked item in the list use menuInfo.id 
     switch (item.getItemId()) { 
     case CONTEXT_DELETE: 
      deleteRes(wordId); // delete function for the item 
      break; 
     default: 
      return super.onContextItemSelected(item); 

     } 
     //((BaseAdapter) favAdapter).notifyDataSetChanged(); 
     return true; 
    } 

삭제 후 목록이 업데이트되어 삭제 된 항목이있는 이전 목록을 표시합니다. notifyDataSetChanged()을 사용해 보았지만 작동하지 않습니다. 문제의 해결 방법은 무엇입니까?

+0

'deleteRes (wordId);'를 통해 기본 데이터를 삭제 했습니까? – xandy

+0

데이터가 올바르게 삭제되고 있습니다 ... 다른 섹션으로 이동하면 .... 해당 섹션으로 돌아가서 올바른 목록을 제공하고 있습니다. –

+0

어쩌면 어댑터와 같은 코드를 게시하여 문제가 무엇인지 알 수 있습니다. – xandy

답변

1

예전 adapter.getCursor().requery()

  • 전화 새로운 커서를 얻을, 또는 다시 쿼리 해결되었습니다.

    favCursor = wordDataHelper.getCursorFav(); 
    ((SimpleCursorAdapter) favAdapter).changeCursor(favCursor); 
    
  • +0

    어떻게 해결 했습니까 자세히 설명해 주시겠습니까? 나는 같은 문제를 겪고있다. http://stackoverflow.com/questions/23512776/listview-not-upadated-properly-after-deletion-in-android-fragment에 내 코드를 게시했습니다. 감사. – user2011302

    0

    array/list에서 해당 항목을 삭제 한 다음 배열/목록을 어댑터에 할당 한 후 notifyDataSetChanged()를 작성하십시오.

    +0

    배열이나 목록이 없습니다. "ListAdapter favAdapter = new SimpleCursorAdapter (this, android.R.layout.simple_list_item_1, favCursor, new String [] {WordDataHelper.ENGWORD}, 새로운 int []를 사용하여 favAdapter (ListAdapter)에 제공되는 커서입니다. ] {android.R.id.text1}); " –

    0

    목록에서 항목을 삭제 한 후에는 데이터베이스에서 새 쿼리를 수행하여 새 커서를 가져와야합니다. 그런 다음 새 커서를 매개 변수로 사용하여 changeCursor()을 호출하여 SimpleCursorAdapter (CursorAdapter)의 커서를 변경할 수 있습니다.

    0

    삭제 후 getListView(). invalidateViews를 사용하십시오.

    0
    1. 쿼리
    2. 중 하나를 사용하여 데이터베이스에서 항목을 삭제 나는 다음과 같은 코드를 사용하고 문제가 adapter.notifyDatasetChanged
    +0

    나는 requery()가 더 이상 사용되지 않을 것이라고 생각한다. – Flo

    +0

    그렇습니다. 어쨌든 사용하지 마십시오. –

    0

    notifyDataSetChanged 메소드를 사용해보십시오. 정상적으로 작동합니다.

    adapter.notifyDataSetChanged(); 
    

    하지만 때때로 실패합니다. 실패한 경우 adepter를 새 목록 요소로 다시 초기화하십시오. 그것은 나를 위해 작동합니다.

    adapter = new ArrayAdapter<Item>(getApplicationContext(),android.R.layout.simple_list_item_1, itemList); 
    setListAdapter(adapter); 
    
    관련 문제