Я не могу найти setOnItemClickListener для recyclerview, созданного в Android Studio

#android-studio #android-recyclerview #onitemclicklistener

#android-studio #android-recyclerview #onitemclicklistener

Вопрос:

Это основное действие. Если я пытаюсь добавить setOnItemClickListener в представление recycler, он сообщает «Не удается разрешить метод ‘setOnItemClickListener’ в ‘RecyclerView'»

открытый класс MainActivity расширяет AppCompatActivity {

 private static final String TAG = "MainActivity";
RecyclerView recyclerView;
linkRecViewAdapter adapter;
ArrayList<Link> newLink = new ArrayList<>();
private ActionMode currentActionMode;
private int currentListItemIndex;
private ActionMode.Callback modeCallBack;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.i(TAG, "onCreate: ");

    adapter = new linkRecViewAdapter(this);
    adapter.setLinks(newLink);
    recyclerView = findViewById(R.id.recView);
    recyclerView.setAdapter(adapter);

    recyclerView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View view) {
            if (currentActionMode != null) {
                return false;
            }
            currentActionMode = startActionMode(modeCallBack);
            view.setSelected(true);
            return true;
        }
    });
    recyclerView.setLayoutManager(new LinearLayoutManager(this));

}
  

Это класс адаптера

общедоступный класс linkRecViewAdapter расширяет RecyclerView.Адаптер<linkRecViewAdapter.ViewHolder> {

 Context context;
ArrayList<Link> links;

public linkRecViewAdapter(Context context) {
    this.context = context;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.link_rec_view, parent, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {

    holder.txtFolderName.setText(links.get(position).getFolderName());
    holder.txtItemCount.setText(links.get(position).getItemCount());
    holder.cardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(context, NewDirectory.class);
            context.startActivity(intent);
        }
    });
    holder.cardView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View view) {
            Toast.makeText(context, "This is a cardView", Toast.LENGTH_SHORT).show();
            return true;
        }
    });
}

@Override
public int getItemCount() {
    return links.size();
}

public void setLinks(ArrayList<Link> links) {
    this.links = links;
}


public class ViewHolder extends RecyclerView.ViewHolder {

    TextView txtFolderName, txtItemCount, txtDateCreated;
    CardView cardView;
    RelativeLayout edtRelLay;
    ImageView imgLink, imgFolder;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        txtFolderName = itemView.findViewById(R.id.txtFolderName);
        txtItemCount = itemView.findViewById(R.id.txtItemCount);
        txtDateCreated = itemView.findViewById(R.id.txtDateCreated);
        cardView = itemView.findViewById(R.id.cardView);
        edtRelLay = itemView.findViewById(R.id.edtRelLay);
        imgFolder = itemView.findViewById(R.id.imgFolder);
        imgLink = itemView.findViewById(R.id.imgLink);
    }
}
  

}

Комментарии:

1. Пожалуйста, расскажите подробнее о вашей проблеме и вставьте свой код здесь, чтобы связаться с вами. Это зависит от вашего кода!

2. @MatinZD Я опубликовал свой код. Пожалуйста, помогите мне.

Ответ №1:

Для сборки RecyclerView нет прослушивателя щелчков. Вам нужно реализовать его самостоятельно, указанным способом и в таком месте, как вы сделали здесь:

 @Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {

    holder.txtFolderName.setText(links.get(position).getFolderName());
    holder.txtItemCount.setText(links.get(position).getItemCount());
    holder.cardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(context, NewDirectory.class);
            context.startActivity(intent);
        }
    });
    holder.cardView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View view) {
            Toast.makeText(context, "This is a cardView", Toast.LENGTH_SHORT).show();
            return true;
        }
    });
}
  

Единственное отличие заключается в том, что вам нужно установить прослушиватель щелчков в самом родительском представлении — для этого вам сначала нужно сохранить его в вашем ViewHolder

 public class ViewHolder extends RecyclerView.ViewHolder {

    TextView txtFolderName, txtItemCount, txtDateCreated;
    CardView cardView;
    RelativeLayout edtRelLay;
    ImageView imgLink, imgFolder;
    View itemView;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        this.itemView = itemView;
        txtFolderName = itemView.findViewById(R.id.txtFolderName);
        txtItemCount = itemView.findViewById(R.id.txtItemCount);
        txtDateCreated = itemView.findViewById(R.id.txtDateCreated);
        cardView = itemView.findViewById(R.id.cardView);
        edtRelLay = itemView.findViewById(R.id.edtRelLay);
        imgFolder = itemView.findViewById(R.id.imgFolder);
        imgLink = itemView.findViewById(R.id.imgLink);
    }
}