当前位置: 首页 > 知识库问答 >
问题:

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

常源
2023-03-14

我正在尝试添加滑动删除功能,以及在长按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();
        }
    }));

共有2个答案

卫高明
2023-03-14

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

如。

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

然后在onLongClick()中选中此标志

景信瑞
2023-03-14

当项目将被完全刷洗时,将调用onsweep。如果您将开始滑动元素,然后将其向后移动,则不会调用该方法。因此,您不应该使用此方法来标记刷卡的结束。您可以从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
    }
}

当您移动元素时,它将是true,在滑动或取消滑动后为false。

 类似资料:
  • 我有一个RecyclerView,这些物品应该在刷卡后移除。我用ItemTouchHelper类解决了这个问题。在onchildraw方法中,我设置了一个红色背景,在列表项后面滑动时出现。最重要的是,在正确的网站上有一个垃圾图标。它工作正常,但是如果你开始刷卡,但不刷卡到底,然后又刷卡回到正常位置,垃圾桶的图标不会消失。但是,它只有在我滑动所选项目时才会消失,而不是在普通项目上。 下面是ItemT

  • 我有一个方法,它将检查RecolyerView中的最后一个元素是否被用户完全可见,到目前为止,我有这段代码,问题是如何检查RecolyerView是否到达了它的底部? PS我有项目分隔符

  • 我正在尝试在回收器视图中实现“刷卡删除”。我有这个密码。 但是,问题是该行在刷卡时被删除。我希望将其保持在那里,即当该行被刷洗时,显示删除按钮,然后用户可以单击该行,而不是完全刷洗删除它,而是在刷洗后显示删除按钮。另外,我也在尝试添加编辑按钮,但在左边的删除按钮上,有什么想法吗?

  • 但当我刷完后,该物品很快就会从列表中移除!我如何锁定刷过的项目,并通过单击“删除”按钮删除?就像Gmail的行为一样。 ps.I在此发布相同的问题https://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=id%20type%20status%20owner%20summary%20stars&g

  • 问题内容: 是否有可靠的跨浏览器方式来检测选项卡是否具有焦点。 场景是,我们有一个应用程序会定期轮询股票价格,如果页面没有重点关注,我们可以停止轮询并为每个人节省交通噪音,尤其是当人们热衷于打开具有不同投资组合的多个标签时。 是并且为此选择吗? 问题答案: 是的,并且应该适合您的方案: http://www.thefutureoftheweb.com/blog/detect-browser-win

  • 我用碎片制作了一个mediaplayer应用程序;歌曲、专辑、艺术家、流派、播放列表 这是我的一个片段中的代码,我将以艺术家为例 在我的initRecyClaire View()方法中,我有一个名为“项目”的数组列表,其中包含歌曲艺术家。Main.songs.get艺术家- 现在,当用户点击一个艺术家时,另一个活动将启动ListSong sActivity.java 这是类中的代码ListSong