java - No Adapter Attached 使用 RecyclerView Adapter 跳过布局错误
问题描述
这些是我在这个项目中执行的步骤:
- 首先,我在 Firebase 上创建用户个人资料
- 创建配置文件后,我将用户重定向到另一个活动,用户正在创建带有 Image 的日记
- 然后将带有图像的日志保存在 Firestore 上
- 在用户配置文件上创建数据后,我正在尝试使用 RecyclerView Adapter 从 Firestore 获取值
- 然后在列表页面上,我试图获取 ArrayList 中的所有值->在这里我收到 No Adapter Attached 的错误
ArrayList 活动文件:
在 OnCreate 中初始化 recyclerView
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_journal_list); firebaseAuth= FirebaseAuth.getInstance(); user= firebaseAuth.getCurrentUser(); noJournalEntry= findViewById(R.id.list_no_thoughts); journalList= new ArrayList<>(); recyclerView= (RecyclerView) findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setHasFixedSize(true); }
在 onStart 中调用 RecyclerView:
@Override protected void onStart() { super.onStart(); //we are getting the user Id of the person who is logged in collectionReference.whereEqualTo("userId", JournalApi.getInstance() .getUserId()) .get() .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() { @Override public void onSuccess(QuerySnapshot queryDocumentSnapshots) { if(!queryDocumentSnapshots.isEmpty()) { for(QueryDocumentSnapshot journals: queryDocumentSnapshots){ Journal journal = journals.toObject(Journal.class); journalList.add(journal); Toast.makeText(JournalListActivity.this,"UserId found", Toast.LENGTH_LONG).show(); } // Invoke Recyclerview journalRecyclerAdapter= new JournalRecyclerAdapter(JournalListActivity.this, journalList); recyclerView.setAdapter(journalRecyclerAdapter); journalRecyclerAdapter.notifyDataSetChanged(); } else { noJournalEntry.setVisibility(View.VISIBLE); } } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Toast.makeText(JournalListActivity.this,"UserId NOT found", Toast.LENGTH_LONG).show(); } }); }
}
如您所见, RecyclerView 调用正常,但 ArrayList 未加载。
错误: _E/RecyclerView: No adapter attached; skipping layout
我参考了 Stackoverflow 中的各种帖子并按照步骤操作,但不确定我哪里出错了。
解决方案
您收到以下警告,而不是错误:
E/RecyclerView:没有附加适配器;跳过布局
因为您将适配器设置在后台线程中。要解决这个问题,您必须在回调外部和内部设置适配器,只需将更改通知它即可。所以请移动以下代码行:
journalRecyclerAdapter= new JournalRecyclerAdapter(JournalListActivity.this, journalist);
recyclerView.setAdapter(journalRecyclerAdapter);
紧接着:
super.onStart();
并将以下行保留在回调中:
journalRecyclerAdapter.notifyDataSetChanged();
警告将消失。
推荐阅读
- vba - 在 VBA 中使用命名范围创建动态优先级列表
- javascript - TextField - 如何从状态道具呈现 defaultValue 文本?
- qt - 通过拖动指针“现在几点”
- javascript - 有没有办法让当天的地图图像自动填充到另一个页面上
- linux - 将文件添加到 rw unionfs/squashfs 有效,但删除无效
- android-accessibility - 任何人都知道如何追踪是什么导致给定视图在 TalkBack 下获得可访问性焦点?
- javascript - 使用循环的 REACT 状态更新会覆盖以前的值
- c# - 如何使用 json 内容反序列化 json 属性
- python - 循环计算嵌套的 JSON 对象
- keyboard - ` 是什么,为什么它用于显示代码?