我知道有这样的问题,但我的问题无法解决。
我正在尝试使'RecyclerView'的'OnItemClickListener',但是当我运行应用程序时,它会停止。
你能告诉我错误在哪里吗?
这里是代码:(请注意,错误在于使该项目可点击)
public class TeacherActivity extends AppCompatActivity { private FirebaseAuth mAuth=FirebaseAuth.getInstance(); private FirebaseUser currentUser= mAuth.getCurrentUser();; private FirebaseFirestore db = FirebaseFirestore.getInstance(); private String UserId =currentUser.getUid(); private static String city; private TeacherAdapter teacherAdapter; public static final String EXTRA_PATH = "com.example.exercise.EXTRA_PATH"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_teacher); setUpRecyclerView(); teacherAdapter.setOnItemClickListener(new TeacherAdapter.OnItemClickListener() { @Override public void onItemClick(DocumentSnapshot documentSnapshot, int position) { String path = documentSnapshot.getReference().getPath(); Intent intent = new Intent(TeacherActivity.this, SecondActivity.class); intent.putExtra(EXTRA_PATH, path); startActivity(intent); } }); }// end of onCreate private void setUpRecyclerView(){ Query query = db.collection("Teachers"); FirestoreRecyclerOptions < Teacher > options = new FirestoreRecyclerOptions.Builder<Teacher>() .setQuery(query, Teacher.class) .build(); teacherAdapter = new TeacherAdapter(options); RecyclerView recyclerView = findViewById(R.id.recycler_view); recyclerView.setHasFixedSize(true); //for performane reasons recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setAdapter(teacherAdapter); teacherAdapter.startListening(); } @Override protected void onStart() { super.onStart(); } @Override protected void onStop() { super.onStop(); teacherAdapter.stopListening(); } }// end of class
这是'RecyclerView'的'adapter':
public class TeacherAdapter extends FirestoreRecyclerAdapter<Teacher, TeacherAdapter.TeacherHolder> { private OnItemClickListener listener; public TeacherAdapter(@NonNull FirestoreRecyclerOptions<Teacher> options) { super(options); } @Override protected void onBindViewHolder(@NonNull TeacherHolder holder, int i, @NonNull Teacher teacher) { holder.tv_teacher_name.setText(teacher.getName()); holder.tv_cv.setText(teacher.getCv()); } @NonNull @Override public TeacherHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.teacher_item, parent, false); return new TeacherHolder(v); } class TeacherHolder extends RecyclerView.ViewHolder { TextView tv_teacher_name; TextView tv_cv; public TeacherHolder(@NonNull View itemView) { super(itemView); tv_teacher_name = itemView.findViewById(R.id.teacher_name); tv_cv = itemView.findViewById(R.id.tv_cv); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int position = getAdapterPosition(); if (position != RecyclerView.NO_POSITION && listener != null){ listener.onItemClick(getSnapshots().getSnapshot(position), position); } } }); } } public interface OnItemClickListener{ void onItemClick(DocumentSnapshot documentSnapshot, int position); } public void setOnItemClickListener(OnItemClickListener listener){ this.listener = listener; } }
logcat的一部分:
E / AndroidRuntime:致命异常:主要进程:com.example.exercise,PID:29966java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.exercise / com.example.exercise.TeacherActivity}:java.lang.NullPointerException:尝试调用虚拟方法'void com.example.exercise.TeacherAdapter.setOnItemClickListener( com.example.exercise.TeacherAdapter $ OnItemClickListener)')上的空对象引用
我知道有这样的问题,但我的问题无法解决。我试图使'RecyclerView'的'OnItemClickListener',但是当我运行应用程序时,它会停止..您能告诉我错误在哪里吗?在这里...
将setOnClickListener代码放入适配器类的onBindViewHolder中,它应该可以正常工作。
您遇到以下错误: