2013-02-28 83 views
0

这里我的代码我ListFragment内(我使用上下文菜单):ListFragment不会刷新

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item 
      .getMenuInfo(); 
    Log.d(TAG, "onContextItemSelected clicked"); 
    long id = info.id; 
    Log.d(TAG, "list id " + id); 

    int menuItemIndex = item.getItemId(); 
    Log.d(TAG, "menuItemIndex " + menuItemIndex); 
    if (menuItemIndex == 0) { 
     try { 
      plantManager.deletePlantRelation(id); 
      CharSequence text = getActivity().getString(
        R.string.info_could_delete_plant); 
      Toast toast = Toast.makeText(getActivity(), text, 
        Toast.LENGTH_LONG); 
      toast.show(); 
      loader = getLoaderManager().restartLoader(0, null, this); 
      myAdapter.notifyDataSetChanged(); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
      CharSequence text = getActivity().getString(
        R.string.info_could_not_delete_plant); 
      Toast toast = Toast.makeText(getActivity(), text, 
        Toast.LENGTH_LONG); 
      toast.show(); 
     } 
    } 
    return true; 
} 

执行的方法,我也得到了吐司 - 消息 - 但名单不会刷新。

期待您的帮助。

在此先感谢!

更新:

public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) { 

     return new CursorLoader(getActivity()) { 
      @Override 
      public Cursor loadInBackground() { 
       myCursor = plantManager.fetchPlantRelations(); 
       return myCursor; 
      } 
     }; 
    } 
+0

我想我们将需要看到onCreateLoader的代码。如果deletePlantRelation实际上从基础数据集中删除了这个项目,那么你不应该同时重启loader *和* notifyDataSetChanged ... – 2013-02-28 20:24:45

+0

是从数据库中删除数据集 - 我已经检查过它 – user1800825 2013-02-28 21:00:40

+0

好吧,这不是一个巨大的帮助:fetchPlantRelations做什么?但是,这里的观点是,这些都不是必要的。请参阅下面的答案。 – 2013-02-28 21:06:53

回答

0

不仅要你不需要在LoaderManager 适配器上notifyDataSetChanged一举两得复位,你真的不应该要做要么。这样做的正确方法是确保由fetchPlantRelations()返回的游标已针对特定URI上的通知进行了注册。如果你这样做,以便对基础数据集的更改(如由deletePlantRelation引起的更改)通知该URI,则其余部分将完全自动发生。点击这里,查看代码:

https://github.com/marakana/yamba/blob/yambaII/YambaService/src/com/marakana/android/yamba/svc/data/YambaProvider.java

看,特别是在线路182和242这是所有有给它。