ScrollView с кнопками внутри, без ответа до второго нажатия на любую кнопку внутри - PullRequest
9 голосов
/ 31 октября 2010

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

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

Ответы [ 4 ]

3 голосов
/ 19 декабря 2010

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

Попробовал несколько подходов в themes.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 не имеет этой проблемы.

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

2 голосов
/ 31 октября 2010

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

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

1 голос
/ 13 февраля 2012

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

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

0 голосов
/ 17 мая 2011

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

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

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

Редактировать: Эта проблема только в 2.2, между прочим, они исправили в 2.3, и это не было проблемой в 2.1.

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