OnTouchListener в родительском представлении не вызывается, когда есть прослушиватель щелчков для дочерних представлений - PullRequest
0 голосов
/ 04 мая 2020
<androidx.constraintlayout.widget.ConstraintLayout
    android:id="@+id/actions"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <View
        android:id="@+id/action_previous"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/action_next"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintHorizontal_weight="3"/>

    <View
        android:id="@+id/action_next"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/action_previous"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintHorizontal_weight="7"/>

</androidx.constraintlayout.widget.ConstraintLayout>

ImageActivity.kt

swipe_parent.setOnTouchListener { v, event ->
  Toast.makeText(this@ImageActivity, "OnTouch called $v, $event", Toast.LENGTH_SHORT).show()
  return@setOnTouchListener true
}

action_previous.setOnClickListener {
  Toast.makeText(this, "Previous", Toast.LENGTH_SHORT).show()
}

action_next.setOnClickListener {
  Toast.makeText(this, "Next", Toast.LENGTH_SHORT).show()
}

Я прочитал во многих комментариях, что если есть onClickListener для дочернего представления, то вызов OnTouchListener не будет передан родителю (если представления структурированы как над) . И логически это также имеет смысл, так как было бы трудно различить щелчки и прикосновения.

Если это мое требование, как мне этого достичь?

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Я столкнулся с той же проблемой. Я решил это, установив

android:clickable="false"
android:descendantFocusability="blocksDescendants"

в родительском представлении.

0 голосов
/ 04 мая 2020

Самый быстрый способ решить эту проблему - использовать ontouch вместо onclick, но mimi c функциональность onclick, внутри дочернего представления ontouch, проверьте это условие, оно выполняется только для случая action_down, что будет полезно в вашем случае. .

if (event.action == MotionEvent.ACTION_DOWN)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...