【问题标题】:ERROR ANDROID STUDIO E/RecyclerView: No adapter attached; skipping layout错误 ANDROID STUDIO E/RecyclerView:未连接适配器;跳过布局
【发布时间】: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) {

        }
    });
}

}

【问题讨论】:

    标签: java android android-studio


    【解决方案1】:

    我要争辩的是,您可以简单地忽略警告,仅此而已。当您有一些数据要显示时,您的回收器适配器会被创建并应用于 RecyclerView。

    【讨论】:

    • 是的,通过忽略提到的错误它工作正常。但是忽略这个错误和这样的错误是真的吗??
    • 我可以添加到上述答案中的是,我的代码库中有一些地方有时确实会出现此警告,我对此很好。例如,当在活动中调用 onCreate() 时,适配器尚未设置,但之后我观察到 LiveData 实例,然后适配器被设置为 RecyclerView。
    【解决方案2】:

    尝试遵循该方法:

    1. 在为 RecyclerView 设置 LayoutManager 的同时创建一个空适配器:将其保存为 Fragment 的字段:
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    userAdapter= new UserAdapter(getContext(), new ArraysList<>(), true);
    recyclerView.setAdapter(userAdapter);
    
    1. 数据准备就绪后,填充适配器并通知:
    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)
        

        【讨论】:

          猜你喜欢
          • 2020-03-12
          • 1970-01-01
          • 2021-12-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-28
          • 2023-03-02
          相关资源
          最近更新 更多