Вопрос

у меня есть 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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top