Перемещение не работает должным образом внутри RecyclerView

#android #android-recyclerview #android-constraintlayout #android-motionlayout

#Android #android-recyclerview #android-ограничение #android-motionlayout

Вопрос:

Хорошего дня!

Я обнаружил проблему при создании примера приложения с помощью MotionLayout и поместил его в окно просмотра вторсырья. Таким образом, в основном мой макет движения-это элемент для повторного просмотра.

Но событие свайпа не работает должным образом, когда есть небольшой жест, который идет вниз или вверх. Пожалуйста, проверьте следующий результат.

При возврате false

Вот мой код:

 class SampleActivity8 : AppCompatActivity() {  private val items = ItemAdapterlt;SampleItem8gt;()  private val fastAdapter = FastAdapter.with(items)   override fun onCreate(savedInstanceState: Bundle?) {  super.onCreate(savedInstanceState)  setContentView(R.layout.activity_sample8)   recyclerView.also {  it.adapter = fastAdapter  it.layoutManager = LinearLayoutManager(this)  it.addOnItemTouchListener(ItemTouchInterceptor())  }   items.add(SampleItem8())  }   class ItemTouchInterceptor : RecyclerView.OnItemTouchListener {  override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean {  return false  }   override fun onTouchEvent(rv: RecyclerView, e: MotionEvent) {  }   override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) {  }  } }  

Я читал об ItemTouchInterceptor этом, но ничего не понимаю. Когда я изменяю onInterceptTouchEvent возврат false , он работает так, как показано на рисунке выше. Но при возврате true все события касания вообще не работают.

Должно ли это произойти, когда я вернусь false , событие касания будет обрабатываться макетом движения, а recyclerview не сможет его получить?

Как решить эту проблему?

Спасибо, действительно ценю, будет ли вся ваша помощь

Комментарии:

1. Сам RecyclerView» крадет » (перехватывает) событие касания из MotionLayout для выполнения вертикальной прокрутки. Вы должны распознать, когда вы выполняете горизонтальный свайп (в onTouchEvent состоянии или путем проверки состояния отображения движения, не уверены, что вам подойдет), затем позвоните recyclerView.requestDisallowInterceptTouchEvent(true) , чтобы сообщить RecyclerView, что вы не хотите выполнять вертикальную прокрутку во время этого события движения.