ScrollView не прокручивается до верха в ViewFlipper

#java #android #scrollview #viewflipper

#java #Android #scrollview #viewflipper

Вопрос:

Я создал ViewFlipper , который перемещается между статьями новостей, которые я анализирую из Интернета.

Все это работает, но когда я прокручиваю текущий элемент вниз, а затем перехожу к следующему / предыдущему элементу, ScrollView не прокручивается до верха нового элемента статьи. Он просто «зависает» в том месте, где я закончил чтение своего последнего элемента.

В конце моего onClick(View v) метода у меня есть thisScrollView.scrollTo(0, 0);

Забавно, что это работает в эмуляторе и на Sony Ericsson Xperia, но не на HTC Desire и Galaxy Tab. Это не должно быть связано с версией Android на устройствах, потому что метод доступен с уровня API 1..

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

Ответ №1:

Я также пробовал scrollTo(0,0) использовать ScrollView, содержащий ViewFlipper в качестве дочернего элемента. Результат был не таким уж точным.

Затем я попробовал smoothScrollTo(0, 0); , как указано ниже

  _viewFlipperParentScrollView.fullScroll(View.FOCUS_UP);
 _viewFlipperParentScrollView.pageScroll(View.FOCUS_UP);
 _viewFlipperParentScrollView.smoothScrollTo(0, 0);
  

Результат не полностью удовлетворяет, но намного лучше, чем тот, с

 _viewFlipperParentScrollView.scrollTo(0, 0);
  

Ответ №2:

Я обычно использую setSelectionAfterHeaderView для этой цели, и это работает на устройствах HTC.

Комментарии:

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

2. Ах, извините, это только для ListView .

Ответ №3:

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

 getView().post(new Runnable() {
            @Override
            public void run() {
                myscrollView.fullScroll(ScrollView.FOCUS_UP);
                myscrollView.smoothScrollTo(0,0);

            }
        });
  

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