Android ListView scrollTo

У меня есть LinearLayout который содержит некоторые другие представления и среди них ListView . Это представление загружается из другого, нажимая кнопку.

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

Проблема в том, что я могу получить элемент Nth первым в списке. Обратите внимание: я не хочу переместить его в текущую позицию на новую, я хочу, чтобы список прокручивался.

Я попытался с setSelected() и scrollTo(x,y) и scrollBy(x,y) но не повезло.

Я также попробовал этот кусок кода, как бы уродливый, но я просто хотел попробовать, чтобы он работал:

 ListView categoryList = (ListView)findViewById(R.id.category_list); categoryList.post(new Runnable() { @Override public void run() { Log.d(this.getClass().getName(), "CategoryActivity.scrollToIndex: " + CategoryActivity.scrollToIndex); if(CategoryActivity.scrollToIndex>0){ ListView categoryList = (ListView)findViewById(R.id.category_list); categoryList.setScrollContainer(true); categoryList.scrollTo(4, CategoryActivity.scrollToIndex * 50); categoryList.requestLayout(); } } }); 

И это дало мне некоторый успех, но ListView тогда вел себя сумасшедшим способом, который я даже не могу описать ….

Есть идеи?

Попробуйте добавить его в очередь сообщений

 categoryList.post(new Runnable() { public void run() { categoryList.scrollTo(4, CategoryActivity.scrollToIndex * 50); } }); 

Он работал для меня в ScrollView ( проверьте этот ответ ).

Я сделал функции, которые могут быть полезны другим для прокрутки списка, они работают для меня в каждой версии, эмуляторе и устройстве для Android, здесь itemheight – фиксированная высота представления в списке.

 int itemheight=60; public void scrollToY(int position) { int item=(int)Math.floor(position/itemheight); int scroll=(int) ((item*itemheight)-position); this.setSelectionFromTop(item, scroll);// Important } public void scrollByY(int position) { position+=getListScrollY(); int item=(int)Math.floor(position/itemheight); int scroll=(int) ((item*itemheight)-position); this.setSelectionFromTop(item, scroll);// Important } public int getListScrollY() { try{ //int tempscroll=this.getFirstVisiblePosition()*itemheight;// Important View v=this.getChildAt(0); int tempscroll=(this.getFirstVisiblePosition()*itemheight)-v.getTop();// Important return tempscroll; }catch(Exception e){} return 0; } 
Intereting Posts
Возможно ли создать пользовательский вид для ActionBar SubMenu? Устройства Android / webOS поддерживают мультисайтовые события Javascript? Изменение размера диалогового окна предупреждения FastScroll Могу ли я отображать конструкцию дизайна Snackbar в диалоговом окне? Нечеткие точки утечки памяти Android не ясны! Android WebView внутри ScrollView прокручивает только scrollview ClassNotFoundException для AndroidAnnotations сгенерированных классов с момента обновления до ADT 22 Доступ к UserDictionary Content Provider на уровне API Android 23 Android есть простой способ создать резервную копию вашего проекта Android? Android ImageButton без рамки, но с индикацией клика ДЕТАЛИ ИСКЛЮЧЕНИЯ: java.lang.IllegalStateException: процесс 3188 Превышена курсовая квота 100, убьет ее с помощью Rom MIUI Android 1.6 Вращение камеры? Как классифицировать андроид на малом, среднем, большом, х-большом экране? Как получить центр карты для v2 карт Android? Бинарная строка XML-файла # 26: ошибка раздувания класса android.widget.TextView