使用 Recycler View 将房间数据库滚动到特定位置

Posted

技术标签:

【中文标题】使用 Recycler View 将房间数据库滚动到特定位置【英文标题】:Room database scroll to a particular position using Recycler View 【发布时间】:2019-11-01 03:10:12 【问题描述】:

我正在使用 Room 数据库从数据库中获取数据。 Recyclerview 我想滚动到 recyclerview 中的特定位置。

我已经尝试过 list.setNestedScrollingEnabled(true)

StationListRepository stationListRepositoryOnlyActive = new StationListRepository(getApplicationContext()); stationListRepositoryOnlyActive.getActiveStationList().observe(this, new Observer>() @覆盖 public void onChanged(List OnlyActivestations) Log.d("OnlyActivestations", "" + OnlyActivestations.size()); 断言 OnlyActivestations != null; if (OnlyActivestations.size() > 0 || FinalList.size() > 0) if (FinalList != null && FinalList.size() > 0) OnlyActivestations = sortList(OnlyActivestations); FinalList.addAll(OnlyActivestations);

                 else 
                    OnlyActivestations = sortList(OnlyActivestations);
                    FinalList = OnlyActivestations;
                
                Log.d("FinalListSizeActive",""+FinalList.size());
                detailsAdapter = new db_stationListAdapter(context, FinalList);
                //recyclerView.setNestedScrollingEnabled(true);
                StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);
                staggeredGridLayoutManager.scrollToPosition(10);
                recyclerView.setLayoutManager(staggeredGridLayoutManager);
                recyclerView.setAdapter(detailsAdapter);
                detailsAdapter.notifyDataSetChanged();
                runOnUiThread(new Runnable() 
                    @Override
                    public void run() 
                       // stopLoading();
                        stopAnimation();
                    
                );
            
        
    );

我除了回收站视图自动滚动到位置 10

【问题讨论】:

【参考方案1】:

将数据设置到适配器后尝试使用下面的代码

recyclerView.smoothScrollToPosition(10);

您可以将 OnLayoutChangeListener 添加到您的 RecyclerView。

recyclerView.addOnLayoutChangeListener(new View.OnLayoutChangeListener()

        @Override
        public void onLayoutChange(View v, int left, int top, int 
             right, int bottom, int oldLeft, int oldTop, int oldRight, 
                         int oldBottom) 

            if (bottom < oldBottom) 

                   recyclerView.postDelayed(new Runnable() 

                    @Override
                    public void run() 


                            recyclerView.smoothScrollToPosition(10);


                    
                , 100);
            
        
    );

【讨论】:

你的第二个解决方案对我有用,我真的很感谢你。

以上是关于使用 Recycler View 将房间数据库滚动到特定位置的主要内容,如果未能解决你的问题,请参考以下文章

当用户将手从屏幕上移开时,如何使 Recycler View 滚动缓慢而流畅?

如何制作自定义形状的 Recycler View?

如何使 Recycler View 表现得像 PlayStore Recycler Views

如何在 kotlin 的 Recycler View Adapter 中添加更多数据列表而不清除先前的数据?

如何将我的 Recycler View 设计为与 Chanel App 的设计相似?

Recycler View 不显示数据