0

我在爲Android編程應用程序。我上傳到GitHub:app修改數據庫行後RecyclerView不會刷新

我有一個ViewPager(MainActivity.java)控制兩個片段。在第一個片段(FirstFragment.java)上,您可以添加出現在RecyclerView上的People(People.java)(同樣在FirstFragment.java上)。當您單擊RecyclerView上的其中一個列表項目時,其詳細信息(名稱和ID)出現在第二個片段(SecondFragment.java)上。 SecondFragment.java還包含一個可以刪除所選人員的按鈕。

要存儲People對象,我使用了人員列表並使用PeopleLab.java中的方法進行管理。該程序工作正常:我可以添加/刪除People對象到列表中,並且它出現在RecyclerView上。
之後,我決定用數據庫替換List。它只意味着創建數據庫(數據庫文件夾中的3個文件)並編輯PeopleLab.java中已有的和兩種新的方法。其他文件保持不變。 數據庫按預期工作(使用sqlite3進行檢查),我可以像以前一樣添加/刪除People,並且查詢工作正常。我唯一的問題是,這些更改不會出現在RecyclerView上。但是如果我關閉並重新打開應用程序,則會顯示更改。 這就像RecyclerView不關心數據庫在運行時,只有當應用程序啓動(或關閉,不知道)。

你有什麼想法可能導致這個問題?我唯一的猜測是我錯過了Android應用程序處理數據庫的方式。

小姐:對不起,我的英語。

回答

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)。 (並刷新你的數據集,順便說一句)

+1

謝謝,它正在工作! – ftibi93

+0

不客氣,玩得開心。 – Xalamadrax

0

它不會工作automatically.You既可以使用通知適配器的底層數據已更改,因此該適配器可以讀取和重新加載data.It可以使用adapter.notifyDataSetChanged()

或者使用可以使用CursorLoader完成以達到相同的效果

+0

我已經使用notifyDataSetChanged()。它在按鈕的onClickListener(向數據庫添加新行)中調用,並且我有另一個按鈕,只有目的是調用它。 – ftibi93