Pregunta

Tengo un LinearLayout que contiene algunos otros puntos de vista y entre los que un ListView. Este punto de vista se carga desde otro haciendo clic en un botón.

Este botón alguna manera especifica qué elemento en el ListView tiene que ser el primero visible en la lista. Los elementos que rellena la lista se recuperan a través de HTTP desde un servidor externo.

El problema es que puedo conseguir el enésimo elemento para ser el primero en la lista. Tenga en cuenta, no quiero para moverlo forma que la posición actual a uno nuevo, quiero a la lista de desplazamiento.

He tratado con setSelected() y scrollTo(x,y) y scrollBy(x,y) pero sin suerte.

También he dado una oportunidad a este pice de código, tan feo como es, pero yo sólo quería probar que estaba trabajando 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();

                }
            }
        });

Y esto me dio un poco de éxito, pero entonces el ListView se comportaba loco de una manera que ni siquiera soy capaz de describir ....

¿Alguna idea?

¿Fue útil?

Solución

Trate de añadirlo a la cola de mensajes

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

Se trabajó para mí en un ScrollView ( comprobar esta respuesta ).

Otros consejos

i hecho funciones que podrían ser útiles para otros por desplazamiento vista de lista, que trabajan para mí en todas las versiones de Android, emulador y el dispositivo, aquí ItemHeight es la altura fija de vista en la vista de lista.

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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top