修改数据库行后,RecyclerView不会刷新

时间:2017-02-26 10:28:21

标签: java android database android-viewpager android-recyclerview

我正在为Android编写应用程序。我将其上传到GitHub:app

我有一个控制两个片段的ViewPager(MainActivity.java)。在第一个片段(FirstFragment.java)上,您可以添加出现在RecyclerView上的People(People.java)(也在FirstFragment.java上)。当您单击RecyclerView上的一个列表项时,其详细信息(名称和ID)将显示在第二个片段(SecondFragment.java)上。 SecondFragment.java还包含一个按钮,您可以删除所选的People with。

为了存储People对象,我使用了一个人员列表,并使用PeopleLab.java中的方法对其进行了管理。该程序工作正常:我可以添加/删除People对象到列表,它出现在RecyclerView罚款 之后,我决定用数据库替换List。它只意味着创建数据库(数据库文件夹中的3个文件)并编辑PeopleLab.java中已有的和两个新方法。其他文件保持不变。 数据库正在按预期工作(使用sqlite3进行检查),我可以像以前一样添加/删除人员并且查询工作。我唯一的问题是这些变化不会出现在RecyclerView上。但是,如果我关闭并重新打开应用程序,则会显示更改。 它就像RecyclerView在运行时并不关心数据库,只在应用程序启动(或关闭,不确定)时才会关注。

你知道可能导致问题的原因吗?我唯一的猜测是我想念Android应用程序如何处理数据库。

P.S。:对不起我的英语。

2 个答案:

答案 0 :(得分:0)

它不会自动运行。您可以使用通知适配器已更改基础数据,以便适配器可以获取并重新加载数据。可以使用adapter.notifyDataSetChanged()

完成

或者使用可以使用CursorLoader来实现相同的

答案 1 :(得分:0)

您可以在适配器上调用notifyDataSetChanged(),但不为该适配器提供任何新数据。

FirstFragment

private void updateUI() {
    PeopleLab peopleLab = PeopleLab.get(getActivity());
    List<People> peoples = peopleLab.getPeople();

    if(mAdapter == null) {
        mAdapter = new PeopleAdapter(peoples);
        mRecyclerView.setAdapter(mAdapter);
    } else {
        // You actually have to change your dataset
        mAdapter.changeDataSet(peoples);
    }
}

在您的Adapter

public void changeDataSet(List<People> people) {
    this.mPeoples = people;
    notifyDataSetChanged();
}

这是一种残酷的方式来做到这一点。 最好在插入/删除调用notifyItemInserted(int itemPosition)notifyItemRemoved(int itemPosition)时通知您的适配器。 (顺便说一句,刷新数据集)