gpt4 book ai didi

android - 如何处理项目上的 RecyclerView 单击监听器的行和其中的 View

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:26:42 25 4
gpt4 key购买 nike

我有 recyclerView,其中包含一些 TextView 和 2 个 ImageView 。

我想在用户点击每一行时执行一项任务,在用户点击每个 ImageView 时执行另一项任务......但我只能同时处理其中一个。

现在,如果我设置 recylerview.addOnItemTouchListener,我无法在适配器中为它们设置 clicklistener 来处理 ImageView onclicks,因为当用户单击 ImageView 时,行的点击监听器将触发。

下面的代码是我处理回收器 View 项目的类

public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;

public interface OnItemClickListener {
public void onItemClick(View view, int position);

public void onLongItemClick(View view, int position);
}

GestureDetector mGestureDetector;

public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) {
mListener = listener;
mGestureDetector = 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 && mListener != null) {
mListener.onLongItemClick(child, recyclerView.getChildAdapterPosition(child));
}
}
});
}

@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.getChildAdapterPosition(childView));
return true;
}
return false;
}

@Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { }

@Override
public void onRequestDisallowInterceptTouchEvent (boolean disallowIntercept){}

这是我的适配器内部支架

public MyViewHolder(View view) {
super(view);
tv_word = (TextView) view.findViewById(R.id.tv_word_show);
tv_english = (TextView) view.findViewById(R.id.tv_english_show);
tv_translation = (TextView) view.findViewById(R.id.tv_tranlation_show);
tv_numbershow = (TextView) view.findViewById(R.id.tv_numershow);
fav = (ImageView) view.findViewById(R.id.iv_fav);
more = (ImageView) view.findViewById(R.id.iv_more);
fav.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(mContext,"show some text for test",Toast.LENGTH_LONG).show();
}
});

感谢对我的问题的任何帮助

最佳答案

在您的适配器类中创建接口(interface)。

 public void setClickListener(ClickListener clickListener) {
this.clickListener = clickListener;
}

public interface ClickListener {
void ItemClicked(View v, int position);
}

像这样在顶部声明对象:

ClickListener clickListener;

holder.view.setOnclickListener(new OnclickListener(
@Override
public void onClick(View v) {
if (clickListener != null) {
clickListener.ItemClicked(v, getAdapterPosition());
}
}
);

在类中实现此接口(interface),并在您将适配器设置为 recyclerview 的地方初始化点击监听器。

 adapter.setClickListener(this);

当您在类里面实现它时,您将获得以下方法:

 @Override
public void ItemClicked(View v, int position) {

}

v.getId() 应用 switch case 你可以处理你需要实现的点击监听器。

关于android - 如何处理项目上的 RecyclerView 单击监听器的行和其中的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39546767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com