2016-01-13 4 views
0

В моем приложении мне нужно получить полную строку вида recycler (потому что я хочу получить представление о той строке) определенной позиции. Я искал, что мы можем получить позицию методом getAdapterPosition(). Теперь, после получения позиции через это метод Я хочу получить полный ряд этой позиции. Как я могу это достичь?Как получить строку определенного положения просмотра recycler в android?

Редактирование: У меня есть некоторый взгляд на каждую строку, и я установил onclick listner на кнопки, щелкнув по которой я хочу получить полную строку или верхний макет (родительский макет). Что я понимаю, когда на клик называется return return parent вид на которую кнопка завернута, но не полная строка.

ответ

0

У меня есть решение этой проблемы сейчас. Сначала получите вид ресайклер в адаптере, используя ниже метод в адаптер класса

@Override 
public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
    super.onAttachedToRecyclerView(recyclerView); 
    mRecyclerView = recyclerView; 
} 

и использования событий, нажмите кнопку ниже код

RecyclerView.ViewHolder holder = mRecyclerView.findViewHolderForLayoutPosition(getAdapterPosition()); 

, а затем бросил держатель на реальный объект, как указано ниже

MessageViewHolder messageViewHolder = (MessageViewHolder) holder; 

Congrats !! теперь у вас есть полный ряд этой конкретной позиции. Счастливое кодирование

0

Я использовал один класс для получения вида (и нажмите и Long щелкает тоже)

public class RecyclerTouchListener implements RecyclerView.OnItemTouchListener { 

    private GestureDetector gestureDetector; 
    private ClickListener clickListener; 

    public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final ClickListener clickListener) { 
     this.clickListener = clickListener; 
     gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { 
      @Override 
      public boolean onSingleTapUp(MotionEvent e) { 
       return true; 
      } 

      @Override 
      public void onLongPress(MotionEvent e) { 
       View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); 
       if (child != null && clickListener != null) { 
        clickListener.onLongClick(child, recyclerView.getChildPosition(child)); 
       } 
      } 
     }); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { 

     View child = rv.findChildViewUnder(e.getX(), e.getY()); 
     if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) { 
      clickListener.onClick(child, rv.getChildPosition(child)); 
     } 
     return false; 
    } 

    @Override 
    public void onTouchEvent(RecyclerView rv, MotionEvent e) { 
    } 

    @Override 
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 

    } 


    public interface ClickListener { 

     void onClick(View view, int position); 

     void onLongClick(View view, int position); 
    } 

} 

и использовать этот

/** * Recycler вида элемент обработчика щелчка */

rvDraft.addOnItemTouchListener(new RecyclerTouchListener(getActivity(), 
        rvDraft, new RecyclerTouchListener.ClickListener() { 
       @Override 
       public void onClick(View view, final int position) { 
    // click operation 

       } 

       @Override 
       public void onLongClick(View view, final int position) { 

        Dialogs dialog = new Dialogs(); 
        dialog.showAlertForAction(getActivity(), getString(R.string.are_u_sure_want_to_delete), new AlertInterface() { 
         @Override 
         public void buttonYesClick() { 

          // long press operation 

         } 

         @Override 
         public void buttonNoClick() { 

         } 
        }); 

       } 
      })); 

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

0

Использовать глобальную переменную View selectedView. В своем классе пользовательских ViewHolder, предполагая, что элемент строки будет набор LinearLayout добавьте следующие строки

rowItemLayout = (LinearLayout) itemView.findViewById(R.id.row_item); 

rowItemLayout.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     selectedView = rowItemLayout; 
     .. 
    } 
}); 

Теперь вы можете извлечь эту точку зрения с помощью

public View getSelectedView() { 
      return selectedView; 
} 
Смежные вопросы