首页 > 解决方案 > 如何修复 .this 和 .setOnItemClickListener 之间的静态/非静态冲突?

问题描述

我希望能够单击我的 recyclerview“计划器”中的信息按钮,这样我就可以在该特定事件/日内看到我的 (firestore) 参与者。

但是我遇到了一个我无法修复的错误。我遇到的最大麻烦是我在片段中工作。所以复制 Youtube 并不总是有效的。+ 我是编码和 java 的新手。

这想让它成为非静态的

但是当我解决这个问题时:

这想让它再次静止

LesAdapter 内部

public LesViewHolder(@NonNull View itemView){
        super(itemView);

        Lijst_Soort = itemView.findViewById(R.id.idLes);
        Lijst_Waar = itemView.findViewById(R.id.idWaar);
        Lijst_Wanneer = itemView.findViewById(R.id.idWanneer);
        btnInfo = itemView.findViewById(R.id.btnInfo);

        btnInfo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
              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;
    }

在 HomeFragment 内部可以在 .setOnItemClickListener 之前使用 LesAdapter 是错误的吗?

LesAdapter.setOnItemClickListener(new LesAdapter.OnItemClickListener() {
        @Override
        public void onItemClick(DocumentSnapshot documentSnapshot, int position) {
            String wanneer = documentSnapshot.getString("Wanneer");

            Intent intent = new Intent(getActivity(), Deelnamelijst.class);
            intent.putExtra("Welke les", wanneer);
            startActivity(intent);
        }
    });

这就是我正在尝试的:

https://www.youtube.com/watch?v=3WR4QAiVuCw

https://www.youtube.com/watch?v=ZXoGG2XTjzU

标签: javaandroidandroid-fragmentsandroid-recyclerviewgoogle-cloud-firestore

解决方案


错误是尝试调用LesAdapter.setOnItemClickListener假定该setOnItemClickListener方法是静态方法,因此您可以在不创建实例的情况下调用它。

对于您的示例,setOnItemClickListener它不是静态方法,因此要调用它,您需要一个LesAdapter. 所以使用你创建的任何实例

LesAdapter lesAdapter = new LesAdapter();

lesAdapter.setOnItemClickListener(new LesAdapter.OnItemClickListener() {
        @Override
        public void onItemClick(DocumentSnapshot documentSnapshot, int position) {
            String wanneer = documentSnapshot.getString("Wanneer");

            Intent intent = new Intent(getActivity(), Deelnamelijst.class);
            intent.putExtra("Welke les", wanneer);
            startActivity(intent);
        }
    });

推荐阅读