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

Android 5.1设备Fragment中RecyclerView不显示的问题解决

解决Android 5.1设备上RecyclerView“no adapter attached”且不显示列表项的问题

我之前也踩过Android 5.1设备的这个RecyclerView坑,模拟器正常但实体机出问题,核心原因是RecyclerView在首次布局绘制时还没有关联Adapter,Android 5.1的系统对这个状态的处理比高版本更严格,导致后续即使设置了Adapter也可能不触发重新布局,同时输出“skip layout no adapter attached”的日志。给你几个针对性的解决步骤:

1. 提前初始化空Adapter,避免布局时无Adapter关联

你现在是在网络请求成功后才创建并设置Adapter,但网络请求是异步的,RecyclerView会先完成首次布局,这时候没有Adapter就会触发警告。正确的做法是在设置LayoutManager之后,立刻初始化一个空数据的Adapter并绑定到RecyclerView:

recyclerView = (RecyclerView)view.findViewById(R.id.newsList);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
// 提前初始化空列表和Adapter,绑定到RecyclerView
articleList = new ArrayList<>();
newsRecyclerAdapter = new NewsRecyclerAdapter(getContext(), articleList);
recyclerView.setAdapter(newsRecyclerAdapter);

// 之后再发起网络请求
ArticleService articleService = ServiceGenerator.createService(ArticleService.class);
articleService.getLatestNewsHeadlines(CONSTANTS.COUNTRY_US, CONSTANTS.CATEGORY_BUSINESS, CONSTANTS.API_KEY)
 .enqueue(new Callback<NewsDataModel>() {
     @SuppressLint("WrongConstant")
     @Override
     public void onResponse(Call<NewsDataModel> call, Response<NewsDataModel> response) {
         // 先判断请求是否成功,避免空指针崩溃
         if (response.isSuccessful() && response.body() != null && response.body().getArticles() != null) {
             // 更新列表数据并通知Adapter刷新
             articleList.clear();
             articleList.addAll(response.body().getArticles());
             newsRecyclerAdapter.notifyDataSetChanged();
         }
     }
     @Override
     public void onFailure(Call<NewsDataModel> call, Throwable t) {
         Toast.makeText(getContext(), "There was some error"+t.toString(), Toast.LENGTH_SHORT).show();
         Log.e("Error",t.toString());
     }
 });

这样RecyclerView在首次布局时就有Adapter关联,不会再输出警告,后续数据加载完成后,通过notifyDataSetChanged()就能让列表正常显示数据。

2. 检查Adapter实现是否兼容Android 5.1

Android 5.1对应的API级别是22,确保你的NewsRecyclerAdapter里没有使用API22及以下不支持的特性,比如Lambda表达式(如果用了的话需要通过Retrolambda或者AndroidX兼容库处理)、某些新的View原生方法(建议用ViewCompat替代以保证兼容性)。

3. 确认网络权限和设备网络状态

  • 确保你的AndroidManifest.xml中已经添加了网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
  • 检查实体设备是否正常连接网络,避免因为网络问题导致请求失败,列表始终为空。

内容的提问来源于stack exchange,提问作者Abhishek Pathak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:44:53