You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

动态添加的RecyclerView启动时滚至末尾,需默认显示位置0

解决动态添加RecyclerView默认滚动到末尾的问题

问题根源

你创建LinearLayoutManager时传入的第三个参数为true,开启了reverseLayout属性。这个属性会反转RecyclerView的列表排列方向,导致默认显示最后一项;同时直接调用scrollToPosition(0)可能因视图未完成测量布局,无法生效。

解决方案

  1. 关闭reverseLayout属性
    将LinearLayoutManager的第三个参数改为false,让列表保持正常顺序,默认从位置0开始显示:

    rv_scroll.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
    
  2. 延迟执行滚动操作
    如果调整参数后仍存在问题,可通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 07:18:33