OnClick не вызывается, пока я получаю событие OnTouch - PullRequest
0 голосов
/ 08 октября 2019

У меня есть проблема с моим приложением. Я пытаюсь решить ее 2 дня назад, но ничего не могу найти об этом.

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

Если он нажимает только один раз, кнопка не работает, но если он спамит ееКнопка иногда срабатывает. Я также поместил некоторые отладки в его версию, и это то, что я нашел:

user_hud_main_button.setOnTouchListener { v, event ->
            when (event.action) {
                MotionEvent.ACTION_DOWN -> report += "down;"
                MotionEvent.ACTION_UP -> report += "up;"
            }
            false
        }
        user_hud_main_button.setOnClickListener {
            report += "click;"
            toggleMainButton()
            Analytics.send(Event.Type.BtnAddMain)
        }

edit: setOnTouchListener был добавлен только для целей отладки при работе над проблемой

в то время как на моемтестовые телефоны я получаю:

вниз; вверх; нажмите; вниз; вверх; нажмите; вниз; вверх; нажмите;

пользователь получает:

вниз; вверх; вниз; вверх; вниз; вверх; вниз; вверх;

События вверх и вниз отправляются корректно, но не по щелчку. Почему это происходит и почему только для нескольких пользователей?

Вот макет действия:

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/content"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment
        android:name="com.hulab.mapstr.newArch.MapFragment"
        android:id="@+id/activity_map_fragment_map"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />


    ...

    <FrameLayout
        android:id="@+id/activity_map_hud_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </FrameLayout>

    <!-- Bottom drawer -->
    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <include layout="@layout/main_bottom_sheet"></include>
    </androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

код активности:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
...

supportFragmentManager.beginTransaction().add(R.id.activity_map_hud_container, UserHUDFragment()).commit()
...

    }

UserHUDFragment:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        ...

        user_hud_main_button.setOnClickListener {
            toggleMainButton()
            Analytics.send(Event.Type.BtnAddMain)
        }
        ...
    }

UserHUD макет:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/user_hud">
        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/user_hud_current_map_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent">


            <com.google.android.material.floatingactionbutton.FloatingActionButton
                android:id="@+id/user_hud_main_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:elevation="1dp"
                app:fabSize="normal"
                app:useCompatPadding="true"
                android:src="@drawable/add_fab_button" />

...

        </androidx.constraintlayout.widget.ConstraintLayout>

...

    </androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>

Заранее спасибо и извините за мой английский

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Не допускается, чтобы прослушиватели onTouch и onClick находились в одном представлении. Вы можете делать все с помощью onTouchListener.

0 голосов
/ 09 октября 2019

Хорошо, проблема была в том, что у меня был «бесконечный цикл» из моей активности, когда я запрашивал разрешение, когда пользователи отклоняли его с опцией «Больше не спрашивать», поэтому каждое событие клика было прервано

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...