android - 在 RecyclerView 焦点上滑动操作菜单并向后滑动问题
问题描述
我正在尝试在 RecyclerView 中实现一个简单的滑动操作菜单,并且我尝试使用一种简单的方法,使用 ItemTouchHelper 和包含行本身和附加在行下方的按钮的布局(对于每一行)。我应该在滑动时显示它们。
虽然布局按预期工作,但我仍然有许多重要问题。这是一个屏幕截图:
问题如下:
- 我需要在按钮上单击 3 次才能进行触摸
- 当我这样做时,我无法将行滑回原位,除非我再次单击它并将其从行的最末端拖动。如果我不单击按钮,我可以正常向后滑动该行。
这是我目前正在使用的简单 ItemTouchHelper 回调:
class FileSwipeCallback :
ItemTouchHelper.SimpleCallback(1, 1) {
override fun getMovementFlags(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder
): Int {
return if (viewHolder is FileAdapter.FileViewHolder) {
val swipeFlags = ItemTouchHelper.START or ItemTouchHelper.END
makeMovementFlags(0, swipeFlags)
} else 0
}
override fun onMove(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
return true
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { }
override fun onChildDraw(
c: Canvas,
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
dX: Float,
dY: Float,
actionState: Int,
isCurrentlyActive: Boolean
) {
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
// Swipe left
if (dX < 0) {
(viewHolder as FileAdapter.FileViewHolder).itemView.findViewById<ConstraintLayout>(
R.id.fileItemActions
).visibility = View.VISIBLE
val transitionX = 0.295f * dX
getDefaultUIUtil().onDraw(
c,
recyclerView,
(viewHolder.itemView.findViewById(
R.id.fileInfoRow
)),
transitionX,
dY,
actionState,
isCurrentlyActive
)
}
}
}
}
我真的很感激一个解决方案。我已经在 Stack Overflow 上进行了搜索,但只找到了不清楚或部分解决方案。
编辑:用新的和更经典的两层方法更新了问题。可见的结果是相同的,但问题发生了变化。
解决方案
推荐阅读
- java - Raspan:从 Java/Tomcat 执行 Python 脚本,tomcat8 用户不接受
- swift - RLMException', reason: '试图在写事务之外修改对象
- angular - Angular Universal:我需要在服务器上安装 npm 包吗?
- node.js - Angular 5 - 使用 websockets 时检测变化
- ruby-on-rails - has_many 通过查询未返回预期结果
- ruby-on-rails - 打印字符串中给定的字符次数
- javascript - 根据特定属性过滤对象数组
- c - 对已经为 NULL 的指针使用 free() 是否有意义?
- php - 在 Laravel 中上传多个文件
- sql-server - 如何在字符串中找到N的第二个位置