Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检测是否正在刷卡Recyclerview项目?_Java_Android_Android Recyclerview - Fatal编程技术网

Java 如何检测是否正在刷卡Recyclerview项目?

Java 如何检测是否正在刷卡Recyclerview项目?,java,android,android-recyclerview,Java,Android,Android Recyclerview,我正在尝试添加滑动删除功能,以及在长按RecyclerView项时显示底部工作表弹出窗口。我正在使用ItemTouchHelper.SimpleCallback进行滑动删除,并使用ItemTouchListener在长按项目时显示弹出窗口。 问题是,当我滑动项目以删除其内容时,也会检测到长按。 我想要的是,当物品被刷洗时,它应该忽略长按。 我有一个ItemTouchHelper类,它扩展了Simplecallback以进行滑动删除。以下是附加recyclerview以便刷卡删除的代码 Item

我正在尝试添加滑动删除功能,以及在长按RecyclerView项时显示底部工作表弹出窗口。我正在使用
ItemTouchHelper.SimpleCallback
进行滑动删除,并使用
ItemTouchListener
在长按项目时显示弹出窗口。 问题是,当我滑动项目以删除其内容时,也会检测到长按。 我想要的是,当物品被刷洗时,它应该忽略长按。 我有一个ItemTouchHelper类,它扩展了Simplecallback以进行滑动删除。以下是附加recyclerview以便刷卡删除的代码

 ItemTouchHelper.SimpleCallback itemTouchHelperCallback = new RecyclerItemTouchHelper(0, ItemTouchHelper.LEFT, this);
    new ItemTouchHelper(itemTouchHelperCallback).attachToRecyclerView(recyclerView);
下面是为长时间单击事件添加侦听器的代码

 recyclerView.addOnItemTouchListener(new NotesRecyclerTouchListener(getApplicationContext(), recyclerView, new NotesRecyclerTouchListener.ClickListener() {
        @Override
        public void onLongClick(View view, int position) {
                Note note = notesList.get(position);
                Toast.makeText(getApplicationContext(), note.getTitle() + " is log pressed!", Toast.LENGTH_SHORT).show();
                View sheetView = MainActivity.this.getLayoutInflater().inflate(R.layout.view_bottom_sheet_dialog, null);
                BottomSheetDialog dialog = new BottomSheetDialog(MainActivity.this);
                dialog.setContentView(sheetView);
                dialog.show();
        }
    }));

正如@DavidVelasquez所建议的,您应该在刷卡开始时设置一个标志,并根据您的
onLongClick()
中的状态进行操作,但
onsweep()
不是一个好办法。相反,您应该使用
ItemTouchHelper.SimpleCallback#onchildraw()
方法来检测刷卡的时间,并使用
onsweep()方法来检测刷卡的结束时间

例如


然后只需在onLongClick()中选中此标志,当项目将被完全刷洗时,将调用擦除的

。如果您将开始滑动元素,然后将其向后移动,则不会调用该方法。因此,您不应该使用此方法来标记刷卡的结束。
您可以从
onchildraw
这样使用
isCurrentlyActive

var swiping: Boolean = false

override fun onChildDraw(c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, dX: Float, dY: Float, actionState: Int, isCurrentlyActive: Boolean) {
    super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
    if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
        swiping = isCurrentlyActive
    }
}

滑动或取消滑动后,移动元素时为真,滑动或取消滑动后为假。

添加标志如何?调用
onsweed()
事件时,将
swied
标志设置为
true
。然后,如果长单击事件也被触发,请检查该标志,如果该标志为真,则该标志在滑动事件期间,因此不要执行长单击中的代码,只需退出该方法即可。当刷卡事件完成时,将标志重置为false。刷卡完成后将调用onsweep(),但我需要检查刷卡是否正在进行。哎呀,我的意思是
onchildraw()
,如下面的回答所示:)我是以稍微不同的方式执行的。由于我的recyclerview在MainActivity中,因此我将无法访问childDraw(),因此我在ItemTouchHelper类中声明了一个抽象方法,并在MainActivity中实现该方法,以获取dX的值,该值为滑动位移,然后我在onLongClick()函数中使用,如果(dX@Jan Stoltman这不起作用。两个方法都被称为onchildraw()和onsweep。还有其他解决方案吗?
var swiping: Boolean = false

override fun onChildDraw(c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, dX: Float, dY: Float, actionState: Int, isCurrentlyActive: Boolean) {
    super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
    if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
        swiping = isCurrentlyActive
    }
}