2016-01-13 56 views
0

在我的應用程序中,我需要獲得一個完整的回收器視圖行(因爲我想獲得該行的某些視圖)。我搜索了我們可以通過方法getAdapterPosition()獲取位置。方法我想獲得該位置的完整行。我該如何實現它?如何在android中獲取回收站視圖的特定位置的行?

編輯:我對每一行都有一些看法,我在按鈕上設置了onclick listner,我想要獲得完整的行或頂部佈局(父佈局)。我明白的是,當點擊被稱爲返回父查看哪個按鈕被包裝但未完成的行。

回答

0

我現在已經解決了這個問題。首先,在適配器類

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

,並在下面的代碼

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

click事件使用通過以下方法得到適配器回收站視圖,然後下面

MessageViewHolder messageViewHolder = (MessageViewHolder) holder; 
提到投持有人的實際對象

恭喜!現在你有一個完整的特定位置。快樂編碼

0

我用一個類獲得視圖(點擊和點擊龍太)

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); 
    } 

} 

,並使用該

/** * 鑑於回收站項目單擊處理 */

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; 
} 
相關問題