Android - действие выхода при щелчке по элементу в представлении ресайклера

У меня есть несколько элементов списка в моем RecyclerView. Я правильно обрабатываю щелчки для каждого элемента, но мне нужно закрыть действие при нажатии любого элемента. Becuase RecyclerView не имеет метода setOnItemClickListener, я должен сделать это в адаптере:

@Override
public void onBindViewHolder(final Holder holder, int position) {
    // ...

    holder.flagNameTextView.setText(arrayList.get(position).getName());

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Go back to the previous activity
            // such as onBackPressed();
        }
    });
}

Но, конечно, адаптер не расширяет Activity, поэтому я не могу использовать onBackPressed() или finish().

Как я могу это сделать?


person busuu    schedule 05.03.2017    source источник
comment
Возможный дубликат действия вызова из ViewHolder в RecyclerView?   -  person OneCricketeer    schedule 05.03.2017
comment
@Prajnan Bhuyan Да, но, как я уже сказал в вопросе, я не могу использовать метод finish(), потому что щелчок находится внутри адаптера, который НЕ расширяет класс Activity.   -  person busuu    schedule 05.03.2017
comment
Передайте объект контекста в конструктор адаптера и вызовите context.finish () везде, где вы хотите, чтобы ваша деятельность была завершена См. Это   -  person nobalG    schedule 05.03.2017
comment
@Prajan Вы не можете вызвать finish из класса адаптера @ Milan. Вам нужно извлечь событие щелчка из адаптера и установить его из Activity ... и это было рассмотрено в нескольких местах   -  person OneCricketeer    schedule 05.03.2017


Ответы (5)


Используйте следующее:

Объявите контекст глобально.

Context c;

Затем введите контекст с вашей деятельностью.

((YourActivity)c).finish();

Надеюсь это поможет.

person tahsinRupam    schedule 05.03.2017
comment
Подключать адаптер к активности - плохая идея - person OneCricketeer; 05.03.2017
comment
@ cricket_007, почему это плохая идея? Что ты предлагаешь? - person busuu; 05.03.2017
comment
должен getActivity () улучшить ситуацию? - person tahsinRupam; 05.03.2017
comment
@Milan Посмотреть дубликат, который я пометил - person OneCricketeer; 05.03.2017

Вы можете передать ссылку на свою деятельность, бросить конструктор адаптера и вызвать Activity.finish ();

Надеюсь это поможет.

Извините за мой английский.

person Cochi    schedule 05.03.2017

Вы можете получить контекст из flagNameTextView:

((Activity)holder.flagNameTextView.getContext()).finish();  
person Nika Kurdadze    schedule 05.03.2017

Кроме того, вы можете определить обратный вызов интерфейса, например OnClickListener, в адаптере RecyclerView. Затем реализуйте этот интерфейс в Activity, передайте его в адаптер и затем используйте в обратном вызове View OnClickListner.

person Jack_Zhang    schedule 06.03.2017

Просто используйте YourActivityName.this.finish ().

Добавляя название Activity, вы сообщаете android, какое «это» вам нужно.

Это будет работать, только если ваш адаптер НЕ определен как статический класс.

person theblitz    schedule 05.03.2017