Android ListView Scrollto.
-
28-09-2019 - |
Вопрос
у меня есть LinearLayout
который содержит некоторые другие взгляды и среди тех ListView
Отказ Этот вид загружен с другого, нажав кнопку.
Эта кнопка как-то укажет, какой элемент в ListView должен быть первым видимым в списке. Элементы, которые заполняют список, извлекаются через HTTP с внешнего сервера.
Проблема в том, что я могу получить n-й элемент быть первым в списке. Обратите внимание, что я не хочу перемещать его с той текущей позицией для нового, я хочу прокрутить список.
Я пытался с setSelected()
а также scrollTo(x,y)
а также scrollBy(x,y)
Но без удачи.
Я также поставил попробовать эту пьесу кода, как уродливая, как это, но я просто хотел попробовать F, работал:
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();
}
}
});
И это дало мне несколько успехов, но посмотрела список сумасшедший Поэтому я даже не могу описать ....
Есть идеи?
Решение
Попробуйте добавить его в очередь сообщений
categoryList.post(new Runnable() {
public void run() {
categoryList.scrollTo(4, CategoryActivity.scrollToIndex * 50);
}
});
Работал для меня в ScrollView (Проверьте этот ответ).
Другие советы
Я сделал функции, которые могут быть полезны для других для прокрутки ListView, они работают для меня в каждой версии Android, эмулятором и устройством, здесь ItemHeight - фиксированная высота представления в ListView.
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;
}