【问题标题】:Select ReyclerView item(just single tap) with recycler view selection library使用 recyclerview 选择库选择 RecyclerView 项目(只需单击)
【发布时间】:2019-08-02 17:49:47
【问题描述】:

我是 RecyclerView 选择库的新手。我准备RecyclerView 只需单击即可选择多个项目。我的问题是所有文章和教程都表明选择过程从长按开始。

如何覆盖以单击开始选择?谢谢。

我正在使用implementation 'androidx.recyclerview:recyclerview-selection:1.0.0'

教程,我试过了..

【问题讨论】:

  • 试试这个库 android:resizeableActivity="true" android:supportsPictureInPicture="true" android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"

标签: android android-recyclerview android-support-library


【解决方案1】:

经过数周的挖掘,我找到了可行的解决方案。 根据한로니

如果您想单击选择,只需覆盖 inSelectionHotspot(e: MotionEvent) 以返回 true

object : ItemDetailsLookup.ItemDetails<Long>() {
        override fun getSelectionKey(): Long? {

            return itemId
        }

        override fun getPosition(): Int {
            return adapterPosition
        }

        override fun inSelectionHotspot(e: MotionEvent): Boolean {
            return true
        }

更多信息请关注Here

【讨论】:

  • 禁用长按怎么样?意味着将其用于不同的操作?
  • 请多解释一下。
  • 当然,我想要的是通过单击启用选择的选项,并执行其他操作,例如长按打开图像,就像 Google 文件应用程序一样。
  • 我如何自定义inSelectionHotspot,以便只有一个复选框是唯一的可选区域并单击一次?
【解决方案2】:

我认为最好的方法是你需要使用下面的代码来实现。

  recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getContext(), new RecyclerItemClickListener.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
              // Add your selection code here...
            }
        }));

下面是 RecyclerItemClickListener 类。

package com.android.app;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;

public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {

    GestureDetector mGestureDetector;
    private OnItemClickListener mListener;

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

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

    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

    }

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

这是 RecyclerView 的自定义 onItemClickListener。

【讨论】:

  • 我很抱歉,@Nitish,因为你可能误解了一些东西。我的主题是关于ReyclerViewSelection。谢谢!
  • 哦!抱歉,有机会我会研究一下,如果你想直接做的话,你也可以在上面使用(没有 ReyclerViewSelection)。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多