2

Я хочу осуществить длительное нажатие на CardView внутри RecyclerViewRecyclerView onLongClickListener отказываются вызвать

Расположение:

<android.support.v7.widget.RecyclerView 
     android:id="@+id/recycler_view" 
     android:scrollbars="vertical" 
     android:longClickable="true" 
     android:hapticFeedbackEnabled="true" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     /> 

Я попытался это:

mRecyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view); 
mRecyclerView.setLayoutManager(new LinearLayoutManager(Utils.context)); 
mRecyclerView.setOnLongClickListener(new AdapterView.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View view) { 
       Toast.makeText(Utils.context,"dsfd",Toast.LENGTH_LONG).show(); 
       return true; 
      } 
     }); 

И я также пытался для реализации этого события в классе RecyclerView.ViewHolder, но ничего не работает. У меня длинный эффект нажатия, но само событие не срабатывает. Нет onItemLongClickListener. Я также пробовал это: RecyclerView onClick.

Что мне не хватает?

+0

Поместите слушателей в виджеты в 'RecyclerView', а не на' RecyclerView'. «Я также пробовал это: RecyclerView onClick». - Кажется, у них правильные ответы. – CommonsWare

+0

Что касается первой части: вы имеете в виду, что я должен определить событие с длинным кликом для всех виджетов внутри вида карты? что, если пользователь долго нажимает за пределы виджетов? – Amos

+0

«Должно ли это быть на ресайклере или нет?» -- Прости. Ответ Eng.Fouad не устанавливает прослушиватель длинного щелчка на 'RecyclerView'. Его добавляет прослушиватель на ощупь, который настроен для обнаружения кликов и длительных кликов. Если вы хотите, чтобы весь элемент был долговечным, это, вероятно, лучший подход. Если вам нужно только часть элементов, которые можно долго кликать, поставьте слушателя на виджеты в элементах. – CommonsWare

ответ

2

Вы можете создать интерфейс, в котором вы должны реализовать свой метод onLongClicked (int position). И используйте его. Выполните эти шаги, чтобы создать onLongClickListener:

Создать свой интерфейс:

public interface IRecyclerViewClickListener { 

    void onLongClicked(int position); 
} 

Создать объект прослушивателя в вашей деятельности/фрагмент и передать этот объект прослушивателя адаптера в создании адаптера метода. Пример:

// ... some code ... 
adapter = new MoviesListAdapter(getActivity(), list, listener); 
rvDialogs.setAdapter(adapter); 
// ... code ... 

В адаптере в вашем принадлежащем конструктору ViewHolder установить длинный слушатель itemView:

public class MyViewHolder extends RecyclerView.ViewHolder { 

     TextView Title; 
     // ... 

     public MessageViewHolder(View itemView) { 
      super(itemView); 

      Title = (TextView) itemView.findViewById(R.id.tvDialogTitle); 
      // ... 

      itemView.setOnLongClickListener(new View.OnLongClickListener() { 
       @Override 
       public boolean onLongClick(View v) { 
        listener.onLongClicked(getAdapterPosition()); 
        return false; 
       } 
      }); 
     } 
    } 

После того как в вашей деятельности/установка фрагмента вашего IListener:

listener = new IRecyclerViewClickListener() { 
      @Override 
      public void onLongClicked(int position) { 
       Toast.makeText(getActivity(), String.valueOf(position), Toast.LENGTH_SHORT).show(); 
      } 
     }; 

Надеется, что это поможет вы! Удачи и извините за мой плохой английский;)

+0

Должен быть помечен как ответ. Работает чудесно. –

Смежные вопросы