【问题标题】:Problem in making the items in RecyclerView clickable使 RecyclerView 中的项目可点击时出现问题
【发布时间】:2019-11-03 23:22:39
【问题描述】:

我知道有这样的问题,但没有解决我的问题..

我正在尝试制作 '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”的“适配器”:

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: 致命异常: main 进程:com.example.exercise,PID:29966 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.exercise/com.example.exercise.TeacherActivity}:java.lang.NullPointerException:尝试调用虚拟方法'void com.example.exercise.TeacherAdapter.setOnItemClickListener( com.example.exercise.TeacherAdapter$OnItemClickListener)' 在空对象引用上

【问题讨论】:

  • 请仅使用android-studio 标签来回答有关 Android Studio IDE 本身的问题。对于一般的 Android 编程问题,请使用android 标签。
  • 应用崩溃时 logcat 会说什么
  • 如果应用程序崩溃,会有一个堆栈跟踪。请在 logcat 上查找,并将其添加到您的问题中。也请回复@AlexMamo
  • @AlexMamo 这是 logcat 的一部分,在此先感谢..

标签: java android android-recyclerview google-cloud-firestore


【解决方案1】:

您收到以下错误:

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.exercise, PID: 29966 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.exercise/com.example.exercise.TeacherActivity}: java .lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void com.example.exercise.TeacherAdapter.setOnItemClickListener(com.example.exercise.TeacherAdapter$OnItemClickListener)”

因为您在 teacherAdapter 对象上调用 .setOnItemClickListener(),此时该对象为 null。要解决这个问题,您只需移动以下代码块:

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

    }
});

在你的适配器声明之后:

teacherAdapter = new TeacherAdapter(options);

在您的setUpRecyclerView() 方法中,您的问题将得到解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多