ScrollView с кнопками внутри, без ответа до второго нажатия на любую кнопку внутри

Я пару дней пытался решить эту проблему, но я не могу понять это. Проблема в том, что простая активность с простым макетом, ScrollView - > LinearLayout - > и множеством кнопок внутри макета (в содержимом прокрутки). Все работает отлично, но есть одна хитрость. Когда я нажимаю кнопку, скажем, в верхней части содержимого прокрутки и сразу прокрутите вниз до нижней части содержимого и нажмите другую кнопку, ничего не произойдет, пока я не нажму второй раз и все снова приходит в норму. Это можно воспроизвести в любое время, и это независимый код (я пробовал более 20 сценариев). У меня пока нет большого опыта работы в Android, но похоже, что прослушиватель прокрутки останавливает прослушиватель onClick или что-то в этом роде. Любая помощь в этом будет очень признательна. Заранее спасибо.

PD. Если я программно делаю scrollTo(), вместо ручной прокрутки пальцами, все работает просто отлично, и щелчок отвечает при первом касании. Это просто подавляет меня.

4 ответов


все ведет себя нормально.

когда вы начинаете перемещаться,ScrollView будет требовать сенсорных событий, пока вы не перестанете касаться экрана немного. В Android 2.2 вы узнаете, когда прокрутка считается полной, потому что полоса прокрутки справа исчезнет.


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

пробовал несколько подходов в темах.XML-код:

<item name="android:scrollbarDefaultDelayBeforeFade">100</item>
<item name="android:scrollbarFadeDuration">100</item>
<item name="android:fadeScrollbars">true</item>

но ничего не помогало. Кажется, что это системная вещь с scrollViews. Это может помочь увидеть, что происходит:

setOnScrollListener(new OnScrollListener(){
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
      // TODO Auto-generated method stub
    }
    public void onScrollStateChanged(AbsListView view, int scrollState) {
      // TODO Auto-generated method stub
      if(scrollState == 0) Log.i("a", "scrolling stopped...");
    }
  });
}

но это (к сожалению)не помогает в преодолении проблемы , а скорее объясняет ее.

Примечание: это происходит только если вы использовать функцией ScrollView. У ListView нет этой проблемы.

у кого-нибудь есть другая идея ?


У меня такая ситуация. У меня есть ExpandableListView, он просто ведет себя нормально. Когда я поворачиваю мобильный телефон в горизонтальное положение и поворачиваю назад, некоторые элементы в одной группе ExpandableListView не будут отвечать на событие click. Если я не прокручу список или не щелкну элемент группы этих элементов, событие будет отправлено элементам, которые я щелкнул ранее, и правильно выполнит коды прослушивателя щелчка.

Это произошло как в Android 2.3 и 4.0...


Я смог исправить это, переопределив onScrollChanged, а затем отправив ScrollView MotionEvent через OnTouchEvent, когда границы будут достигнуты для имитации касания пользователя.

Это hackiest, грязный программирования, я могу представить, но это работает хорошо в моем приложении. Это приложение предназначено только для телефонов под управлением 2.2, и эта ошибка должна быть исправлена каким-то образом.

Если у кого есть лучшее решение, Пожалуйста, дайте мне знать.

Edit: эта проблема только в 2.2 btw, они исправили это в 2.3, и это не было проблемой в 2.1.