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

时间:2018-07-31 15:58:44

标签: java android android-recyclerview

我正在尝试添加滑动功能,以便在长按RecyclerView项目时删除并显示底页弹出窗口。我正在使用ItemTouchHelper.SimpleCallback滑动删除和使用ItemTouchListener来显示长按项目时的弹出窗口。 问题是,当我滑动项目以删除它时,还会检测到长按。 我想要的是在滑动项目时应该忽略长按。 我有ItemTouchHelper类,该类扩展了Simplecallback以便将其删除。以下是附加recyclerview以便删除的代码。

 ItemTouchHelper.SimpleCallback itemTouchHelperCallback = new RecyclerItemTouchHelper(0, ItemTouchHelper.LEFT, this);
    new ItemTouchHelper(itemTouchHelperCallback).attachToRecyclerView(recyclerView);

Follwing是为长时间单击事件添加侦听器的代码。

 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 个答案:

答案 0 :(得分:2)

正如@DavidVelasquez所建议的那样,您应该在滑动开始时设置一个标志,并根据其在onLongClick()中的状态进行操作,但是onSwiped()并非可行之路。相反,您应该使用ItemTouchHelper.SimpleCallback#onChildDraw()方法来检测滑动的时间,并使用onSwiped()方法来检测滑动的时间。

例如。

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()中检查此标志

答案 1 :(得分:1)

fetch_component_c_data = () => { ... this.props.set_data(data); } 将在项目完全刷过后调用。如果您将开始滑动元素然后将其移回,则不会调用该方法。因此,您不应使用此方法来标记刷卡的结束。 您可以像这样从action.js使用onSwiped

isCurrentlyActive

移动元素时为true,滑动或取消滑动后为false。