ПРИМЕЧАНИЕ: я действительно не рекомендую использовать такие хаки, это непрофессионально и неустранимо, но чем больше вы знаете ...

лкиваюсь со странным поведением RecyclerView как второго потомка CoordinatorLayout, сразу после AppBarLayout (как описано во многих примерах).

Моя проблема в том, что когда я прокручиваю вид рециркулятора и хочу нажать на конкретный элемент. Иногда мне нужно щелкнуть 2 раза, чтобы выбрать этот элемент, кажется, это связано с поведением броска. Например, если я прокрутил до нижней части окна рециркуляции, то если я провожу пальцем от нижней части экрана к вершине (чтобы увидеть больше данных, но в моем случае я не вижу больше данных, так как я Я уже в нижней части), а затем быстро нажмите на элемент, кажется, чтобы остановить бросок, и второй щелчок на самом деле выбрать элемент ... Такое поведение явно не происходит при использовании простого представления переработчика без CoordinatorLayout.

Мой просмотрщик просто держит простой список строк и использует следующее поведение макета: @ string / appbar_scrolling_view_behavior

У тебя есть идеи почему?

[РЕДАКТИРОВАТЬ] Я только что попробовал с примером Android Studio Scrolling Activity, и похоже, что это ошибка из репозитория поддержки Google. Фактически, при использовании поддержки версии 26.1.O (то же самое с 26.0.0 и 26.0.2), ошибка, о которой я говорю, присутствует, но если вы попытаетесь использовать версию 26.0.0-alpha1 или 26.0.0-beta1, это на самом деле работает ...

В Google есть две ошибки:https://issuetracker.google.com/u/1/issues/66996774 https://issuetracker.google.com/u/1/issues/68077101

Пожалуйста, отметьте эти ошибки, если вы столкнулись с той же проблемой

Ответы на вопрос(3)

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

По сути, идея состоит в том, чтобы симулировать щелчок по nestedScrollView.

В моем случае после того, как я обнаружил, что «AppBarLayout» полностью раскрылся, я посылаю сигнал вложенному.

protected void onCreate(final Bundle savedInstanceState) {

    getAppBarLayout().addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {

      @Override
      public void onOffsetChanged(final AppBarLayout appBarLayout, final int verticalOffset) {

          if (verticalOffset == 0) { 
              // State.EXPANDED
              simulatedClick(nestedScroll)
          } else if (Math.abs(verticalOffset) >= appBarLayout.getTotalScrollRange()) { 
              // State.COLLAPSED
          } else { 
              // State.IDLE
          }
      }
  });
}

private void simulatedClick(@NonNull final View view) {
    // Obtain MotionEvent object
    final long downTime = SystemClock.uptimeMillis();
    final long eventTime = SystemClock.uptimeMillis() + 100;
    final MotionEvent motionEvent = Mo,tionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, 0.0f, 0.0f, 0);
    // Dispatch touch event to view
    view.dispatchTouchEvent(motionEvent);
}

ПРИМЕЧАНИЕ: я действительно не рекомендую использовать такие хаки, это непрофессионально и неустранимо, но чем больше вы знаете ...

ecyclerView:

android:nestedScrollingEnabled="false"

Я надеюсь, что это поможет вам.

он будет опубликован позже.

https://gist.github.com/chrisbanes/8391b5adb9ee42180893300850ed02f2

 Vishal Vaishnav03 дек. 2018 г., 08:26
Это действительно полезно

Ваш ответ на вопрос