Intereting Posts
Устройство Android Debug Bridge (adb) – без прав доступа Android – ориентация экрана перезаряжает активность Android-тестирование устройства с ошибкой Robolectric throws AndroidManifest.xml не найдено или не файл Можно ли вычислить скорость, интегрируя данные акселерометра с течением времени? Android – анимация Fadeout для заставки Android MediaPlayer Ошибка 1021 – создать многоэкранный экземпляр экземпляра Установка приложения программно из Android-источника Переключение эмулятора в ландшафтный режим в ubuntu 10.10 Android: Espresso не дожидается пока фрагмент или активность не будут показаны, чтобы каждый тест не прошел Как получить Textinputlayout подскажите андроид в нескольких строках? Android – заполнить заполнители для разных типов сборки Вытащите вложенное scrollview, чтобы увеличить изображение на его верхней части Android POST имеет пустой ответ Устройства Android Fastboot, не возвращающие устройство Отправка сообщения через WhatsApp

Определение функции RecyclerView onCLickListener в действии

RecyclerView отличается от ListView, потому что он не предлагает класс onItemCLickListener для обработки событий щелчка.

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

Что делать, если текст или что-то еще, что должно быть передано следующему действию, действительно не существует в представлениях, к которым имеет доступ ViewHolder, но скорее является частью Activity, которая имеет RecyclerView?

В этом случае функция onClickListener должна быть реализована внутри действия, чтобы текст мог быть перенаправлен. Возможно.

  1. Один из способов – добавить невидимый взгляд, удерживающий этот текст, а затем делать то, что было сделано раньше; Реализация onClickListener в адаптере.

  2. Передайте этот текст, как-то, адаптеру.

Как может "2." Быть реализованы?

Напишите публичную функцию в своей деятельности, например:

public void onClickCalled(String anyValue) { // Call another acitivty here and pass some arguments to it. } 

Теперь в функции адаптера onClick

 @Override public void onClick(View view) { ((YouActivityClass) context).onClickCalled("your argument here"); } 

Ниже приведен пример создания RecyclerView OnClick .

Пример кода:

 public class ContentAdapter extends RecyclerView.Adapter<ContentAdapter.ViewHolder> { public interface OnItemClickListener { void onItemClick(ContentItem item); } private final List<ContentItem> items; private final OnItemClickListener listener; public ContentAdapter(List<ContentItem> items, OnItemClickListener listener) { this.items = items; this.listener = listener; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_item, parent, false); return new ViewHolder(v); } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.bind(items.get(position), listener); } @Override public int getItemCount() { return items.size(); } static class ViewHolder extends RecyclerView.ViewHolder { private TextView name; private ImageView image; public ViewHolder(View itemView) { super(itemView); name = (TextView) itemView.findViewById(R.id.name); image = (ImageView) itemView.findViewById(R.id.image); } public void bind(final ContentItem item, final OnItemClickListener listener) { name.setText(item.name); Picasso.with(itemView.getContext()).load(item.imageUrl).into(image); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.onItemClick(item); } }); } } } 

И используйте адаптер RecyclerView используя следующий код:

 recycler.setAdapter(new ContentAdapter(items, new ContentAdapter.OnItemClickListener() { @Override public void onItemClick(ContentItem item) { Toast.makeText(getContext(), "Item Clicked", Toast.LENGTH_LONG).show(); } })); 

См. Раздел « Установить прослушиватель кликов в RecyclerView

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

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

 public interface PositionClickListener { void itemClicked(int position); } 

Активность может реализовать этот интерфейс или создать экземпляр анонимного внутреннего класса. Таким образом, ваш адаптер может выглядеть так:

 public class MyRecyclerAdapter extends RecyclerView.Adapter { public final PositionClickListener listener; public MyRecyclerAdapter(PositionClickListener listener) { this.listener = listener; } private void createView(int position) { View v = new View(); v.setOnClickListener(new OnClickListener(){ listener.itemClicked(position); }); } } 

Где ListView имеет onItemClickListener, RecyclerView имеет addOnItemTouchListener .

Вы можете предоставить слушателю представление recycler изнутри действия, таким образом, область охвата будет такова, что слушатель должен иметь возможность ссылаться на текст.

Вы можете использовать что-то вроде следующей реализации OnItemTouchListener, которая также работает для захвата левого и правого прокрутки.

 public class RecyclerTouchListener implements RecyclerView.OnItemTouchListener { private static final String TAG = "RecyclerTouchListener"; private static final int SWIPE_MIN_DISTANCE = 120; private static final int SWIPE_THRESHOLD_VELOCITY = 200; private static final int SWIPE_MAX_OFF_PATH = 250; private OnTouchActionListener mOnTouchActionListener; private GestureDetectorCompat mGestureDetector; public static interface OnTouchActionListener { public void onLeftSwipe(View view, int position); public void onRightSwipe(View view, int position); public void onClick(View view, int position); } public RecyclerTouchListener(Context context, final RecyclerView recyclerView, OnTouchActionListener onTouchActionListener){ mOnTouchActionListener = onTouchActionListener; mGestureDetector = new GestureDetectorCompat(context,new GestureDetector.SimpleOnGestureListener(){ @Override public boolean onSingleTapConfirmed(MotionEvent e) { Log.d(TAG, "On Single Tap Confirmed"); // Find the item view that was swiped based on the coordinates View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); int childPosition = recyclerView.getChildPosition(child); mOnTouchActionListener.onClick(child, childPosition); return false; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { Log.d(TAG, "onFling: " + e1.toString() + e2.toString()); try { if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) { return false; } // Find the item view that was swiped based on the coordinates View child = recyclerView.findChildViewUnder(e1.getX(), e1.getY()); int childPosition = recyclerView.getChildPosition(child); // right to left swipe if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { Log.d(TAG, "Left Swipe"); if (mOnTouchActionListener != null && child != null) { mOnTouchActionListener.onLeftSwipe(child, childPosition); } } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { Log.d(TAG, "Right Swipe"); if (mOnTouchActionListener != null && child != null) { mOnTouchActionListener.onRightSwipe(child, childPosition); } } } catch (Exception e) { // nothing } return false; } }); } @Override public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { mGestureDetector.onTouchEvent(e); return false; } @Override public void onTouchEvent(RecyclerView rv, MotionEvent e) { } @Override public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { // do nothing } } 

Затем в своей деятельности добавьте слушателя по строкам

  mRecyclerView.addOnItemTouchListener( new RecyclerTouchListener(getActivity(), mRecyclerView, new RecyclerTouchListener.OnTouchActionListener() { @Override public void onClick(View view, int position) { } @Override public void onRightSwipe(View view, int position) { } @Override public void onLeftSwipe(View view, int position) { } })) 

Его просто, у нас нет интерфейсов для создания интерфейса, мой код просто поместил этот маленький код, и мы

 @Override public void onBindViewHolder(MyViewHolder holder, final int position) { holder.img.setImageDrawable(img[position%img.length]); holder.bodyPartName.setText(bodyPart[position]); if(position==0) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Context c = v.getContext(); Intent intent = new Intent(c, BodyPartExcercise.class); c.startActivity(intent); } }); } }