在适配器,片段和Sqlite数据库之间进行通信以刷新片段

时间:2016-08-17 08:20:46

标签: android sqlite listview android-fragments baseadapter

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

enter image description here

无论如何,我的listView是从SqliteDatabase中获取数据。我需要知道的是:当我从ListView中删除一个项目时我的(收藏,拒绝)碎片ListViews不会得到通知而且不会刷新。

到目前为止我尝试的是:

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

我尝试了这两个解决方案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;


}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

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

void notifyDataSetInvalidated () 

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

参考链接: notifyDataSetInvalidated