动态添加的RecyclerView启动时滚至末尾,需默认显示位置0
解决动态添加RecyclerView默认滚动到末尾的问题
问题根源
你创建LinearLayoutManager时传入的第三个参数为true,开启了reverseLayout属性。这个属性会反转RecyclerView的列表排列方向,导致默认显示最后一项;同时直接调用scrollToPosition(0)可能因视图未完成测量布局,无法生效。
解决方案
关闭reverseLayout属性
将LinearLayoutManager的第三个参数改为false,让列表保持正常顺序,默认从位置0开始显示:rv_scroll.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));延迟执行滚动操作
如果调整参数后仍存在问题,可通过post方法让滚动操作在视图完成布局后执行,确保生效:rv_scroll.post(new Runnable() { @Override public void run() { rv_scroll.scrollToPosition(0); } });
完整修改后的代码
for(int i = 0; i < lists.size(); i++) { RecyclerView rv_scroll = new RecyclerView(this); rv_scroll.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); // 关闭reverseLayout,保持正常列表顺序 rv_scroll.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)); MainRecyclerViewAdapter adapter = new MainRecyclerViewAdapter(this, item_data, new MainRecyclerViewAdapter.OnItemClickListener(){ @Override public void onItemClick(Map<String, Object> item_data_2){ show_msg((String) item_data_2.get("title")); } }); rv_scroll.setAdapter(adapter); v_ll.addView(rv_scroll); // 延迟执行滚动,确保视图已准备好 rv_scroll.post(() -> rv_scroll.scrollToPosition(0)); }
内容的提问来源于stack exchange,提问作者Rakesh Bhagat
相关产品推荐
相关产品推荐

