如何在recyclerview的顶部显示房间数据库中的最后一项

时间:2018-10-30 07:21:25

标签: android android-recyclerview android-room

当我向数据库中添加新对象并尝试使用Recyclerview显示它们时,我正在从房间数据库中提取数据,它们出现在Recycler视图的底部,我没有在Recyclerview中使用列表的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);
                            }
                        }
                    }
                });

            }
        };

1 个答案:

答案 0 :(得分:2)

您必须将列表传递给适配器。首先,您将从数据库中获得列表,该列表的排序方式类似于最后一个索引中的最后一项。提取列表后,只需调用方法即可反转列表。

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