我正在尝试添加滑动功能,以便在长按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();
}
}));
答案 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。