Я пытаюсь понять, как перейти к другому действию, когда я нажимаю на один элемент представления карты (с помощью recyclerview). Я искал в Интернете и на этом веб-сайте и пробовал несколько вариантов, но он не работает (...
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
будет оптимальным подходом, если вы хотите начать различные действия в зависимости от позиции клика.
Внутри ключевого слова обратного вызова 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);
}
}
});
Используйте context
в Intent
вместо this
if(position == 0)
intent = new Intent(context, selection_niveau.class);
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].