我正在使用Recycler View,我将所有设置都设置为ok(因为它接缝了),但是总是使活动崩溃,在进行一些调试之后,我发现了它发生的地方,但是从来没有弄清楚!这是我的RecyclerView适配器
在此处输入代码
public class StudentsAdapter extends RecyclerView.Adapter<StudentsAdapter.mHolder> {
private List<Student> mStudents;
private Context mContext;
public StudentsAdapter(List<Student> students, Context mContext) {
Log.d("StudentsAdapter", "in Constructor");
this.mStudents = students;
this.mContext = mContext;
}
@NonNull
@Override
public mHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
Log.d("StudentsAdapter", "in onCreateViewHolder");
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View v = inflater.inflate(R.layout.note_list_students, parent, false);
return new mHolder(v);
}
@Override
public void onBindViewHolder(@NonNull mHolder holder, int position) {
Log.d("StudentsAdapter", "in onBindViewHolder");
Student student = mStudents.get(position);
Log.d("StudentsAdapter", "in getting Student Object");
holder.nameTv.setText(student.getName());
Log.d("StudentsAdapter", "in Setting Text name");
holder.genderTv.setText(student.getGender());
holder.birthdayTv.setText(student.getBirthday());
}
@Override
public int getItemCount() {
return mStudents.size();
}
public class mHolder extends RecyclerView.ViewHolder {
TextView nameTv, genderTv, birthdayTv;
public mHolder(@NonNull View itemView) {
super(itemView);
Log.d("StudentsAdapter", "in View Holder");
nameTv = itemView.findViewById(R.id.name);
genderTv = itemView.findViewById(R.id.gender);
birthdayTv = itemView.findViewById(R.id.birthday);
}
}
}
经过调试过程,这是我得到的:
2019-12-30 13:05:08.583 6169-6169/com.example.schooltendancemanager D/StudentsAdapter: in Constructor
2019-12-30 13:05:08.625 6169-6169/com.example.schooltendancemanager D/StudentsAdapter: in onCreateViewHolder
2019-12-30 13:05:08.638 6169-6169/com.example.schooltendancemanager D/StudentsAdapter: in View Holder
2019-12-30 13:05:08.638 6169-6169/com.example.schooltendancemanager D/StudentsAdapter: in onBindViewHolder
2019-12-30 13:05:08.638 6169-6169/com.example.schooltendancemanager D/StudentsAdapter: in getting Student Object
2019-12-30 13:05:08.642 6169-6169/com.example.schooltendancemanager E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.schooltendancemanager, PID: 6169
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at com.example.schooltendancemanager.ui.StudentsAdapter.onBindViewHolder(StudentsAdapter.java:43)
at com.example.schooltendancemanager.ui.StudentsAdapter.onBindViewHolder(StudentsAdapter.java:18)
at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6781)
at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6823)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5752)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6019)
检查以确保您的R.layout.note_list_students布局文件包含具有这些ID的Textview。
我认为您在下面这一行中使用了错误的ID,如果您有此ID(性别),请签入设计文件note_list_students.xml。>
genderTv = itemView.findViewById(R.id.gender);
由布局note_list_students引起的问题,即使TextViews匹配,但我曾经有两个版本的Layout,一个是标准版本note_list_students.xml
,另一个是note_list_students.xml v21
版本,因此我重新创建了它并使用了标准布局仅!