【问题标题】:Communicate between Adapter, fragments and Sqlite Data base to refresh FragmentsAdapter、Fragment 和 Sqlite 数据库之间通信以刷新 Fragments
【发布时间】:2016-08-17 08:20:45
【问题描述】:

我有三个片段,其中包含三个使用 BaseAdapter 创建的 ListView。如下图:

无论如何,我的 listView 正在从 SqliteDatabase 获取数据。我需要知道的是:当我从我的 ListView My(Favorite,Rejected) Fragments ListViews 中删除一个项目时,不会通知并且不会刷新。

到目前为止我尝试过的是:

在我的片段的onResume() 方法中notifyDataSetChanged() 之后调用listView.invalidateViews()

我尝试了这些解决方案两个Android ListView not refreshing after notifyDataSetChanged

我的代码是: 在我的 BaseAdapter 中,我使用这些方法来刷新我的适配器:

   public void UpdateView(List<Voiture> items) 
   {
    this.voitureList = items;
    notifyDataSetChanged();
     }

在我的片段中,我正在使用这些方法来通知适配器:

 @Override
public void onResume() {
    super.onResume();
    adapterLogin.UpdateView(databaseHelper.getAllVoiture(username,currentLength));
    listView.setAdapter(new     AdapterLogin(getActivity(),voitureList,username,currentLength,1));

}

在我正在使用的 OncreateView() 方法中:

  @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    inflate = inflater ;
    x = inflater.inflate(R.layout.fragemnt_favoris,null);
    empty = (TextView) x.findViewById(R.id.texteempty);
    listView = (ListView) x.findViewById(R.id.list);

    activity = (Main2Activity) getActivity() ;
    username = activity.getUsername();
    databaseHelper = new DatabaseHelper(getActivity());
    databaseHelper.InsertActivity(2,username);
    voitureList = databaseHelper.getAllVoitureFavourite(1,username);
    adapterLogin = new AdapterLogin(getActivity(),voitureList,username,currentLength,2);
    if (voitureList.size()>0)
    {
        listView.setAdapter(adapterLogin);
        ((BaseAdapter)listView.getAdapter()).notifyDataSetChanged();


    }
    else
    {
        empty.setVisibility(View.VISIBLE);

    }



    // Inflate the layout for this fragment
    return  x;


}

任何帮助将不胜感激。

【问题讨论】:

  • 为什么不使用事件总线库来通知应用程序的不同部分?这些库是:Otto、EventBus、RxBus-Android... :)
  • 嗨 Ahlem,您是否尝试过使用 notifyDataSetInvaldated() 代替?来源:developer.android.com/reference/android/widget/…
  • @Paul :是的,我使用了 notifyDataSetInvalda‌​ted() 但它对我不起作用!
  • @AhlemJarrar :即使在 BaseAdapterClass 中?在更新方法中?只是想在这里彻底:)
  • @AhlemJarrar 很高兴我能帮上忙

标签: android sqlite listview android-fragments baseadapter


【解决方案1】:

感谢 Paul 的回答,我的想法是在我的适配器的 UpdateView() 方法中添加 notifyDataSetInvalidated,它工作得很好,我的片段现在可以正确刷新:

void notifyDataSetInvalidated () 

方法 通知附加的观察者底层数据不再有效或不可用。一旦被调用,此适配器将不再有效,不应报告进一步的数据集更改。

参考链接: notifyDataSetInvalidated

【讨论】:

    猜你喜欢
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多