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

BottomSheetFragment中RecyclerView报错:未设置适配器跳过布局

解决RecyclerView "adapter not set skipping layout" 问题

我看了你的代码,这个报错虽然提示适配器没设置,但实际上你已经完成了设置操作,大概率是初始化顺序、数据源有效性或者上下文获取时机出了问题,下面给你一步步排查和修复的方案:

1. 调整LayoutManager与Adapter的设置顺序

你的populateSongs方法里先设置Adapter再设置LayoutManager,虽然官方没有强制要求顺序,但RecyclerView需要先明确布局规则才能正确渲染列表项,建议调换顺序:

private void populateSongs(){
    // 先设置布局管理器,让RecyclerView明确布局规则
    queueRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    // 再绑定适配器
    queueRecyclerAdapter = new QueueRecyclerAdapter(getContext(),MusicService.songsSet);
    queueRecyclerView.setAdapter(queueRecyclerAdapter);
}

2. 移到onViewCreated中完成初始化(更稳妥的时机)

onCreateView阶段视图刚被加载,此时getActivity()/getContext()可能还未完全绑定到Fragment,容易出现上下文为空的隐性问题。建议把RecyclerView的初始化和数据填充逻辑移到onViewCreated方法里:

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    // 只负责加载布局
    return inflater.inflate(R.layout.queue_bottomsheet,container,false);
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    // 视图创建完成后再初始化组件
    Initialize(view);
    populateSongs();
}

private void Initialize(View view){
    queueRecyclerView = view.findViewById(R.id.queue_recyclerView);
    queueRecyclerView.setHasFixedSize(true);
}

3. 处理数据源为空的情况

检查MusicService.songsSet是否在调用populateSongs时已经被正确初始化,避免传入null导致Adapter异常:

  • 在Adapter中添加空值判断,防止崩溃:
@Override
public int getItemCount() {
    // 如果数据源为空,返回0避免空指针
    return songSet == null ? 0 : songSet.size();
}
  • 在Fragment中先确认数据源有效性再初始化Adapter:
private void populateSongs(){
    if(MusicService.songsSet == null){
        // 可以显示空状态提示,或者初始化一个空的SongSet对象
        MusicService.songsSet = new SongSet();
    }
    queueRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    queueRecyclerAdapter = new QueueRecyclerAdapter(getContext(),MusicService.songsSet);
    queueRecyclerView.setAdapter(queueRecyclerAdapter);
}

4. 额外检查:RecyclerView布局配置

确认queue_bottomsheet.xml中的RecyclerView宽高设置为match_parent,避免因为RecyclerView没有可用空间导致布局跳过的情况。

按照上面的步骤调整后,应该就能解决这个报错了。如果还是有问题,可以尝试打印MusicService.songsSet的状态,确认数据是否在正确的时机被加载。

内容的提问来源于stack exchange,提问作者Pavan Santhosh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 13:33:10