2016-01-13 23 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; 
} 
相关问题