【问题标题】:How to get specific view checkbox from RecyclerView?如何从 RecyclerView 获取特定视图复选框?
【发布时间】:2015-08-05 16:58:49
【问题描述】:
我有一个recyclerview,里面装满了relativelayouts,每个都有一个textview和一个checkbox。在我的 recyclerview 过滤器片段中,我正在实现 android.widget.CompoundButton.OnCheckedChangeListener 以尝试区分单击了 recyclerview 项的哪个 textview,然后执行一个操作,这同样适用于取消选中阶段,如何实现?
谢谢
【问题讨论】:
标签:
android
checkbox
android-recyclerview
【解决方案1】:
在 onCheckedChanged 中,您可以通过 checkbox.getParent() 从您的复选框中获取您的相对布局。
然后,您可以对视图应用任何更改。
如果你想在适配器中的核心位置,你可以通过 your_recyler_view.getChildAdapterPosition(get_relative_layout)
希望这会有所帮助。
【解决方案2】:
你不能直接使用onclick。我找到了一个解决方案,它对我有用。试试看。
第 1 步:首先将此 RecyclerItemClickListener 类添加到您的包中。
public class RecyclerItemClickListener implements
RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
public interface OnItemClickListener {
public void onItemClick(View view, int position);
}
GestureDetector mGestureDetector;
public RecyclerItemClickListener(Context context,
OnItemClickListener listener) {
mListener = listener;
mGestureDetector = new GestureDetector(context,
new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
}
@Override
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
View childView = view.findChildViewUnder(e.getX(), e.getY());
if (childView != null && mListener != null
&& mGestureDetector.onTouchEvent(e)) {
mListener.onItemClick(childView,
view.getChildPosition(childView));
}
return false;
}
@Override
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
}
}
第 2 步:现在使用 onclick 方法。这为您提供了单击项目的位置。一旦您获得位置而不是在该位置获得视图,现在您可以根据您的要求使用它。
recyclerview.addOnItemTouchListener(new RecyclerItemClickListener(
context, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
// TODO Auto-generated method stub
//find your view at clicked position here.
CheckBox c = (CheckBox) view.findViewById(R.id.btn_tag);
if (c.isChecked()) {
//add your code
} else {
//add your code
}
}
}));