简体   繁体   English

Recyclerview 不调用任何 Adapter 方法:onCreateViewHolder、onBindViewHolder

[英]Recyclerview not call any Adapter method: onCreateViewHolder, onBindViewHolder

Here are my codes for MyAdapter, ActivityMain, MinActivity, and User这是我的 MyAdapter、ActivityMain、MinActivity 和 User 代码

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

   Context context;
   ArrayList<User> list;

   public MyAdapter(Context context, ArrayList<User> list) {
     this.context = context;
     this.list = list;
   }

   @NonNull
   @Override
   public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
    return new MyViewHolder(v);
   }

   @Override
   public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
       
     // here is the problem that I don't know how to fix][1]
     // I'm tryin to pass data from firebase to Recyclerview
     // error I'm getting here is:
     // [Cannot resolve method 'getFirstName' in 'User'
     // Cannot resolve method 'getLastName' in 'User'
     // Cannot resolve method 'getAge' in 'User']

              
         User user = list.get(position);
         holder.FirstName.setText(user.getFirstName());
         holder.LastName.setText(user.getLastName());
         holder.Age.setText(user.getAge());
        
    }
        
    @Override
    public int getItemCount() {
         return list.size();
    }
        
   public static class MyViewHolder extends RecyclerView.ViewHolder{
        
         TextView FirstName, LastName, Age;
        
          public MyViewHolder(@NonNull View itemView) {
             super(itemView);
        
              FirstName = itemView.findViewById(R.id.tvFirstName);
              LastName = itemView.findViewById(R.id.tvLastName);
              Age = itemView.findViewById(R.id.tvAge);
        
           }
        }
        
    }
      

This is MainActivity code这是 MainActivity 代码

 public class MainActivity extends AppCompatActivity {
            
       RecyclerView recyclerView;
       DatabaseReference database;
       MyAdapter myAdapter;
       ArrayList<User> list;
            
       @Override
       protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_Main);
            
              recyclerView = findViewById(R.id.userList);
              database = FirebaseDatabase.getInstance().getReference("User");
              recyclerView.setHasFixedSize(true);
                 
              recyclerView.setLayoutManager(new LinearLayoutManager(this));
            
              list = new ArrayList<>();
              myAdapter = new MyAdapter(this,list);
                  
              recyclerView.setAdapter(myAdapter);
            
              database.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot snapshot) {
            
                            for (DataSnapshot dataSnapshot : snapshot.getChildren()){
            
                                User user = dataSnapshot.getValue(User.class);
                                list.add(user);
            
                            }
                            myAdapter.notifyDataSetChanged();
                        }
                        @Override
                        public void onCancelled(@NonNull DatabaseError error) {
                        }
                    });
                }
            }

This is User codes which I generated with getter这是我用 getter 生成的用户代码

   public class User {
            
        String FirstName, LastName, Age;
            
        public String getFirstName() {
            return FirstName;
        }
            
        public String getLastName() {
            return LastName;
        }
            
        public String getAge() {
            return Age;
        }
            
        {
            
            
        }
 }
  

This is my layout file这是我的布局文件

 <?xml version="1.0" encoding="utf-8"?>
 <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        app:cardElevation="8dp"
        app:cardCornerRadius="8dp"
        android:layout_margin="16dp">
            
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="16dp"
                    android:orientation="vertical">
            
                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:orientation="horizontal">
            
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="First Name :"
                            android:textColor="@color/black"
                            android:textSize="26sp"
                            android:textStyle="bold"/>
            
                        <TextView
                            android:id="@+id/tvFirstName"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginLeft="8dp"
                            android:text="Arya"
                            android:textColor="@color/black"
                            android:textSize="20sp" />
            
                    </LinearLayout>
            
                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:orientation="horizontal">
            
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="@string/last_name"
                            android:textColor="@color/black"
                            android:textSize="26sp"
                            android:textStyle="bold"/>
            
                        <TextView
                            android:id="@+id/tvLastName"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginStart="8dp"
                            android:text="@string/stark"
                            android:textColor="@color/black"
                            android:textSize="20sp" />
            
                    </LinearLayout>
            
                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:orientation="horizontal">
            
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="@string/age"
                            android:textColor="@color/black"
                            android:textSize="26sp"
                            android:textStyle="bold"/>
            
                        <TextView
                            android:id="@+id/tvAge"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginLeft="8dp"
                            android:text="18"
                            android:textColor="@color/black"
                            android:textSize="20sp" />
            
                    </LinearLayout>
                </LinearLayout>
            </androidx.cardview.widget.CardView>

When I hit RUN it gives me this error:当我点击运行时,它给了我这个错误:

无法编译值文件

I'm new to coding.我是编码新手。

you can change your code like this你可以像这样改变你的代码

holder.FirstName.setText(list.getFirstName().get(position));
holder.LastName.setText(list.getLastName().get(position));
holder.Age.setText(list.getAge().get(position);

and you should change this code position你应该更改此代码 position

myAdapter = new MyAdapter(this,list);
              
recyclerView.setAdapter(myAdapter);

into under this code在此代码下

database.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot snapshot) {
        
                        for (DataSnapshot dataSnapshot : snapshot.getChildren()){
        
                            User user = dataSnapshot.getValue(User.class);
                            list.add(user);
        
                        }
                        myAdapter.notifyDataSetChanged();
                    }
                    @Override
                    public void onCancelled(@NonNull DatabaseError error) {
                    }
                });

hope it can solve your problem:)希望它能解决你的问题:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 从firebase加载数据时RecyclerView onBindViewHolder()报错 - RecyclerView onBindViewHolder() error when loading data from firebase 如何将 AsyncTask 从 Adapter onBindViewHolder() 移动到 Activity onChildEventListener - How to move AsyncTask FROM Adapter onBindViewHolder() TO Activity onChildEventListener 在 RecyclerView 的 onBindViewHolder 中设置来自 Firebase 实时数据库参考的图像 - Setting Image from a Firebase Realtime Database Reference in onBindViewHolder for a RecyclerView 从适配器 class 中删除项目时如何更新 recyclerview - how to update recyclerview when delete an item from adapter class 有没有希望在 std::variant 上有效地调用公共基础 class 方法? - Is there any hope to call a common base class method on a std::variant efficiently? 如何在 kotlin 中为单个 recyclerview 适配器使用两个模型 - How to use two models for a single recyclerview adapter in kotlin 如何根据本地或数据库中的字段值更改更新 Firestore RecyclerView 适配器? - How to update Firestore RecyclerView Adapter based upon field value changes locally or in database? 如何迭代 recyclerview 适配器中的项目获取结果并将其传递给片段 - How to iterate over items inside a recyclerview adapter get a result and pass it to a fragment 调用 Codeigniter 中未定义的方法 Sendgrid::send() - Call to undefined method Sendgrid::send() in Codeigniter 从 firestore 获取数据时,有什么理由不立即调用 data() 吗? - Is there any reason not to call data() immediately when fetching data from firestore?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM