【问题标题】:How to show the last item from room database at top in recyclerview如何在recyclerview的顶部显示房间数据库中的最后一项
【发布时间】:2018-10-30 07:21:25
【问题描述】:

每当我将新对象添加到数据库并尝试使用 Recyclerview 显示它们时,我都会从房间数据库中提取数据,它们出现在回收器视图的底部我没有使用add(data,Position) recyclerview 适配器中的列表函数作为它会复制 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);
                            }
                        }
                    }
                });

            }
        };

【问题讨论】:

  • 你不能对附加到recyclerview的数据进行排序
  • 每当您收到一个新项目时,只需创建一个新列表,其第一个元素将是新项目并保留旧列表并将此列表设置为回收器视图适配器。
  • 我有一个对象列表,每个对象包含 30 多个字段,并且列表可以轻松增加到 1000 个对象,每次添加新对象时创建一个新列表不是一项昂贵的操作吗? honey_ramgarhia
  • 从 db 中按 desc 顺序获取数据
  • 解决了 Whaed 所说的问题,方法是按 desc order SELECT * FROM MobileDataBaseObjectClass WHERE mDeviceName=:id order by ROWID 获取数据

标签: android android-recyclerview android-room


【解决方案1】:

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

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

【讨论】:

  • 很高兴知道这一点。如果您需要任何帮助,请不要犹豫:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多