Intereting Posts
Панорамирование и масштабирование MapView медленнее после добавления многих надписей Как создать сенсорный экран андроида прокрутки в unity3d? Как полностью обновить веб-представление Android перед загрузкой нового запроса Могу ли я использовать совместимую панель действий И фрагмент в том же самом действии? Является ли устаревшее слово единственной разницей между fill_parent и match_parent Почему использование android: configChanges – плохая практика Android: Как сделать эту фреймворк? Mock GPS Provider работает только в режиме отладки Скопируйте определенный файл в эмулятор в android Просмотр с помощью Zoom и рисования линии на холсте в Android Как добавить внешние шрифты в приложение для Android Использование GCM на Android и iOS без полезной информации уведомления Spinner с пустым выбором по умолчанию Преобразование широты и долготы в esri arcGIS MapPoint Android – Gridview или listview?

Определение функции 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); } }); } }