![](/img/trans.png)
[英]How to delete an item from Room Database and RecyclerView and updating the list
[英]How to show the last item from room database at top in recyclerview
每當我向數據庫中添加新對象並嘗試使用Recyclerview顯示它們時,我都會從房間數據庫中提取數據,它們出現在recyclerview的底部,我沒有在recyclerview適配器中使用list的add(data,Position)
函數作為它會在recyclerview中復制數據,例如,如果數據已經存在於recyclerview中,並且用戶嘗試使用搜索視圖再次對同一數據進行搜索,則它會被復制,同時我也嘗試使用layout-manager反轉列表,但是隨后滾動列表到recyclerview中的最后一個項目,我也嘗試過smoothscroll
到位置0,但也不起作用。 如果數據庫中不存在數據,我將使用搜索視圖首先從數據庫中搜索數據,我通過API從服務器獲取數據,然后將其插入數據庫中,並通知recyclerview所做的更改一切正常,除了數據出現在底端
主要活動代碼
private SearchView.OnQueryTextListener onQueryTextListener =
new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
if (query.length() >= 3) {
getDealsFromDb(query);
}
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
if (newText.length() >= 3) {
getDealsFromDb(newText);
}
return true;
}
private void getDealsFromDb(String searchText) {
searchText = "%" + searchText + "%";
final String finalSearchText = searchText;
model.getDevicenames(searchText).observe(MainActivity.this, new Observer<List<MobileDataBaseObjectClass>>() {
@Override
public void onChanged(@Nullable List<MobileDataBaseObjectClass> mobileDataBaseObjectClasses) {
if (mobileDataBaseObjectClasses != null) {
if (mobileDataBaseObjectClasses.size() == 0) {
Log.i("Test", "Main Activity not found in database fetching from api: ");
model.insertSingleObject(finalSearchText);
} else {
mAdapter.setWords(mobileDataBaseObjectClasses);
}
}
}
});
}
};
您必須將列表傳遞給適配器。 首先,您將從數據庫中獲得列表,該列表的排序方式類似於最后一個索引中的最后一項。 提取列表后,只需調用方法即可反轉列表。
List<DailyConsumption> mList = myDataBase.dailyConsumptionDao().findByDate(date);
Collections.reverse(mList); // inverses the list and shows last item at first index
// now pass this list to the adapter
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.