【问题标题】:Find a view which was tapped (clicked) in RecyclerView查找在 RecyclerView 中被点击(点击)的视图
【发布时间】:2015-11-26 00:55:58
【问题描述】:

我的列表中有一个“单元格”,其中包含图片、文本和一个复选框。这是我的xml fragment_people_list_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android">
    // ... more elements
    <CheckBox />
</RelativeLayout>

我想区分用户是点击复选框还是点击视图的其余部分。我RecyclerView.OnItemTouchListener的相关部分:

@Override
public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent e) {
    View childView = recyclerView.findChildViewUnder(e.getX(), e.getY());

}

它说findChildViewUnder 找到给定点下的最高视图,这始终是我的RelativeLayout

我如何知道用户点击(点击)了哪个视图?

【问题讨论】:

  • 你应该使用自定义适配器来完成这样的事情。试试这个答案stackoverflow.com/a/13220810/783612
  • 嗯,我可以很容易地附上OnClickListenerOnCheckedChangeListener。问题是点击一个复选框会做两件事:1.勾选一个复选框本身; 2:进一步传播到我的onInterceptTouchEvent 听众
  • 并且在我的onInterceptTouchEvent 监听器中,如果点击了复选框,我不想在我的复选框上调用setChecked,反之亦然。有意义吗?

标签: android android-recyclerview


【解决方案1】:

要区分对 checkBox 的点击和对列表项其余部分的点击,您应该为您的列表使用自定义适配器并覆盖 getView。在 getView 方法中,您可以为您的复选框和项目分别设置 OnClickListener。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.list_item, parent, false);
    }
    CheckBox checkBox = (CheckBox) convertView.findViewById(R.id.checkbox);
    checkBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("@@@", "checkbox clicked");
        }
    });
    convertView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("@@@", "item clicked");
        }
    });
    return convertView;
}

【讨论】:

  • 我当然使用了我自己的适配器,它从 RecyclerView.Adapter 扩展而来,它没有方法 getView 可以覆盖。
  • 抱歉,getView 方法用于ListView 的适配器。在RecyclerView 的适配器中,onBindViewHolder 方法中可以应用相同的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多