java - E/RecyclerView : No adapter attached; skipping layout -- when making a todo list app

标签 java android android-studio android-recyclerview

public class ToDoAdapter extends RecyclerView.Adapter<ToDoAdapter.MyViewHolder> {

    Context context;
    ArrayList<ToDoItems> toDoItems;


    public ToDoAdapter(Context c, ArrayList<ToDoItems> p) {
        context = c;
        toDoItems = p;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.front_page_layout, viewGroup, false));
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
        myViewHolder.itemTitle.setText(toDoItems.get(i).getItemTitle());
        myViewHolder.itemSubject.setText(toDoItems.get(i).getItemSubject());
        myViewHolder.itemDueDate.setText(toDoItems.get(i).getItemDueDate());

    }

    @Override
    public int getItemCount() {
        return toDoItems.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder {
        TextView itemTitle;
        TextView itemSubject;
        TextView itemDueDate;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);

            itemTitle = itemView.findViewById(R.id.itemTitle);
            itemSubject = itemView.findViewById(R.id.itemSubject);
            itemDueDate = itemView.findViewById(R.id.itemDueDate);

        }
    }

}

我的Main.class文件

       //Working with data
            mainPageRecyclerView = findViewById(R.id.mainPageRecyclerView);
            mainPageRecyclerView.setLayoutManager(new LinearLayoutManager(this));
            list = new ArrayList<ToDoItems>();


            addNewTask.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent a = new Intent(MainActivity.this,NewTaskAct.class);
                    startActivity(a);
                }
            });

            //get data from firebase
            dbReference = FirebaseDatabase.getInstance().getReference().child("to-do-list");
            dbReference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    //set code to retrieve data and replace layout
                    for (DataSnapshot dataSnapshot1: dataSnapshot.getChildren())
                    {
                        ToDoItems p = dataSnapshot1.getValue(ToDoItems.class);
                        list.add(p);
                    }
                    toDoAdapter = new ToDoAdapter(MainActivity.this, list);
                    mainPageRecyclerView.setAdapter(toDoAdapter);
                    toDoAdapter.notifyDataSetChanged();
                }

我可以看到 Firebase 数据库中的数据,但它不会从数据库中提取信息,我只是在 android studio RUN 中收到以下错误 --> E/RecyclerView:没有附加适配器;跳过布局 作为学习的一部分,我正在编写一个简单的应用程序,我可以将信息写入 firebase,但当我的应用程序更改 View 并需要从数据库调用数据时,我不断收到上述错误

我在 YouTube 上浏览了其他堆栈溢出问题,但我无法理解适用于我的项目的解决方案

最佳答案

您的 Recyclerview 被跳过,因为在绘制布局时没有附加适配器。您当前正在通过事件回调设置适配器,该回调在布局已绘制且 Recyclerview 已被跳过后仍将返回。您需要调用setAdapter()直接在您的 Activity 的 onCreate 中然后更新适配器的数据,确保调用 notifydatasetchanged在您的事件回调中。

在您的 Activity 的 onCreate 中:

// Create an empty adapter since you don't have initial data
// (You may need to alter the constructor of your Adapter class 
//  to keep it from trying to process empty/null data so it doesn't break)
MyAdapter myAdapter = new MyAdapter(null);

// Set the Recyclerview's Adapter so it isn't skipped on the layout pass
myRecyclerView.setAdapter(myAdapter);

然后,在您的事件回调中:

// Update your Adapter with the new data using an update function you define in your Adapter
myAdapter.updateData(myNewData);

// Notify the Adapter that the data has changed
myAdapter.notifyDataSetChanged();

关于java - E/RecyclerView : No adapter attached; skipping layout -- when making a todo list app,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58034951/

相关文章:

java - 我是否需要保留对仅用于执行终结的 WeakReference 的强引用?

java - Hibernate 映射 MySQL SET 类型

java - 按键集比较 map

android - SmsManager 成功

android - 如何在android中完成所有 Activity 并关闭应用程序?

java - 我应该如何将设置菜单中的数据输入 MainActivity.java 文件以调整 Textview 窗口中文本的大小?

Java readFile从字节x到字节y

android - 是否有可能在 android 中获取 twitter 用户的电子邮件地址?如果是,那么如何?

android - 在 Android Studio 中更改布局后需要清理项目

java - 在 Android Studio 中显示在线数据库中的表和列