簡體   English   中英

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

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

這是我的 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);
        
           }
        }
        
    }
      

這是 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) {
                        }
                    });
                }
            }

這是我用 getter 生成的用戶代碼

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

這是我的布局文件

 <?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>

當我點擊運行時,它給了我這個錯誤:

無法編譯值文件

我是編碼新手。

你可以像這樣改變你的代碼

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

你應該更改此代碼 position

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) {
                    }
                });

希望它能解決你的問題:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM