Я пытаюсь понять, как перейти к другому действию, когда я нажимаю на один элемент представления карты (с помощью recyclerview). Я искал в Интернете и на этом веб-сайте и пробовал несколько вариантов, но он не работает (...

0
Hugo Becker 16 Янв 2021 в 20:23

3 ответа

Лучший ответ

Конструктору Intent в качестве первого аргумента требуется контекст, но this в ViewHolder ссылается на экземпляр ViewHolder, поэтому вам необходимо получить контекст из представления или использовать полученную ссылку на контекст. в конструкторе adapter_categorie_solo.

public class ViewHolder extends RecyclerView.ViewHolder{
        TextView title;
        ImageView gridIcon;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            title = itemView.findViewById(R.id.textView2);
            gridIcon = itemView.findViewById(R.id.imageView2);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(v.getContext(), "Clicked -> " + getAdapterPosition(), Toast.LENGTH_SHORT).show();

                    if (getAdapterPosition()==0)
                    {
                        Intent intent = new Intent (ctx,selection_niveau.class);
                        ctx.startActivity(intent);
                    }
                }
            });
        }
    }

Использование switch вместо if будет оптимальным подходом, если вы хотите начать различные действия в зависимости от позиции клика.

0
rahat 16 Янв 2021 в 18:12

Внутри ключевого слова обратного вызова onClick() this будет указывать на анонимный внутренний класс View.OnClickListener; поэтому вам нужно перейти в контекст, используя вместо этого v.getContext().

Примените это, заменив itemView.setOnClickListener на:

itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(v.getContext(), "Clicked -> " + getAdapterPosition(), Toast.LENGTH_SHORT).show();

        if (getAdapterPosition()==0) {
            Intent intent = new Intent (v.getContext(), selection_niveau.class);
        }
    }
});
2
Zain 16 Янв 2021 в 17:41

Используйте context в Intent вместо this

if(position == 0)
     intent = new Intent(context, selection_niveau.class);
0
rajan ks 16 Янв 2021 в 17:30
65752462