【问题标题】:Android Recyclerview Multiple onclick itemsAndroid Recyclerview 多个 onclick 项目
【发布时间】:2015-01-31 18:20:39
【问题描述】:

我正在尝试创建一个 recyclerview,其中每个项目都是一个简单的 TextView + Checkbox

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/title"
    android:layout_width="0dp"
    android:layout_weight="5"
    android:layout_height="wrap_content"
    />
<CheckBox
    android:id="@+id/chk"
    android:layout_width="0dp"
    android:layout_weight="1"
    android:layout_height="wrap_content" />
</LinearLayout>

我想要实现的是(取消)选中复选框(如果它被点击)。但是如果点击了textview,那么在整个item上做波纹动画并开始一个片段过渡。

我在网上找不到一个例子,我找到的最接近的是RecyclerView onClick

我设法让 onclick 在代码中起作用

@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 true;
}
return false;

}

我遇到的问题是返回的 childView 是线性布局,而不是 textview 或复选框。因此,我无法确定点击是在 textview 还是复选框上完成。

我有什么遗漏的吗?理想情况下,如果有人有一个如何实现这一点的工作示例,那就太好了。

谢谢。

【问题讨论】:

  • 为什么不为thatviews设置普通的监听器?
  • 因为我喜欢recyclerview默认的涟漪效应。但是,是的,它开始看起来越来越像我必须单独执行它们,然后单击 textview 以对复选框进行一些效果。

标签: android material-design android-recyclerview


【解决方案1】:

给你:

您的列表项 xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="?attr/selectableItemBackground"
android:layout_height="72dp">

<TextView
    android:id="@+id/title"
    android:layout_width="wrap_content"
    android:text="My Text"
    android:layout_gravity="left|center_vertical"
    android:paddingLeft="16dp"
    android:layout_height="wrap_content" />

<CheckBox
    android:id="@+id/checkbox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="16dp"
    android:layout_gravity="right|center_vertical" />

(我使用 FrameLayout 作为 root 但 LinearLayout 应该也可以工作。)

RecyclerViewAdapter 中使用如下内容:

            @Override
            public YourViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
                View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item, viewGroup, false);

                itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Log.w("Test", "Parent clicked");
                    }
                });
                return new YourViewHolder(itemView);

            }

            @Override
            public void onBindViewHolder(YourViewHolder viewHolder, int i) {

                viewHolder.checkBox.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Log.w("Test", "Checkbox clicked");
                    }
                });
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    相关资源
    最近更新 更多