错误 ANDROID STUDIO E/RecyclerView:未连接适配器;跳过布局
Posted
技术标签:
【中文标题】错误 ANDROID STUDIO E/RecyclerView:未连接适配器;跳过布局【英文标题】:ERROR ANDROID STUDIO E/RecyclerView: No adapter attached; skipping layout 【发布时间】:2020-02-03 16:41:59 【问题描述】:我需要帮助,我有一个错误,那就是:E/RecyclerView: No adapter attach;跳过布局
代码:
public View onCreateView(LayoutInflater inflater, ViewGroup 容器, 捆绑保存的InstanceState) 查看view=inflater.inflate(R.layout.fragment_chats, container, false);
recyclerView= view.findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
fuser= FirebaseAuth.getInstance().getCurrentUser();
usersList= new ArrayList<>();
reference= FirebaseDatabase.getInstance().getReference("Chatlist").child(fuser.getUid());
reference.addValueEventListener(new ValueEventListener()
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
usersList.clear();
for(DataSnapshot snapshot : dataSnapshot.getChildren())
Chatlist chatlist= snapshot.getValue(Chatlist.class);
usersList.add(chatlist);
chatList();
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
);
return view;
private void chatList()
mUsers = new ArrayList<>();
reference= FirebaseDatabase.getInstance().getReference("Users");
reference.addValueEventListener(new ValueEventListener()
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
mUsers.clear();
for(DataSnapshot snapshot : dataSnapshot.getChildren())
User user= snapshot.getValue(User.class);
for(Chatlist chatlist : usersList)
if(user.getId().equals(chatlist.getId()))
mUsers.add(user);
userAdapter= new UserAdapter(getContext(), mUsers, true);
recyclerView.setAdapter(userAdapter);
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
);
【问题讨论】:
【参考方案1】:我要争辩的是,您可以简单地忽略警告,仅此而已。当您有一些数据要显示时,您的回收器适配器会被创建并应用于 RecyclerView。
【讨论】:
是的,通过忽略提到的错误它工作正常。但是忽略这个错误和这样的错误是真的吗?? 我可以添加到上述答案中的是,我的代码库中有一些地方有时确实会出现此警告,我对此很好。例如,当在活动中调用onCreate()
时,适配器尚未设置,但之后我观察到 LiveData 实例,然后适配器被设置为 RecyclerView。【参考方案2】:
尝试遵循该方法:
-
在为 RecyclerView 设置 LayoutManager 的同时创建一个空适配器:将其保存为 Fragment 的字段:
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
userAdapter= new UserAdapter(getContext(), new ArraysList<>(), true);
recyclerView.setAdapter(userAdapter);
-
数据准备就绪后,填充适配器并通知:
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
/// origin code here
// reset data in adapter and not re-creating adapter:
userAdapter.setItems(mUsers);
getActivity().runOnUiThread(() -> userAdapter.notifyDataSetChanged());
// instead of userAdapter= new UserAdapter(getContext(), mUsers, true); recyclerView.setAdapter(userAdapter);
【讨论】:
【参考方案3】:对于 kotlin(片段):
recyclerView.layoutManager=LinearLayoutManager(context)
【讨论】:
【参考方案4】:binding.recyclerView.layoutManager = LinearLayoutManager(this)
【讨论】:
以上是关于错误 ANDROID STUDIO E/RecyclerView:未连接适配器;跳过布局的主要内容,如果未能解决你的问题,请参考以下文章