Frage

Ich habe einen LinearLayout, die einige andere Ansichten und unter denen, enthält eine ListView. Diese Ansicht wird von einem anderen geladenen durch Klicken auf eine Schaltfläche.

Mit dieser Taste irgendwie angeben, was Element in der Listview das erste sichtbare in der Liste sein muss. Die Elemente, die die Liste auffüllt werden über HTTP von einem externen Server abgerufen werden.

Das Problem ist, dass ich das N-te Element die ersten in der Liste sein zu bekommen. Bitte beachten Sie, ich will nicht, um sie aktuelle Position in eine neue Form bewegen, möchte ich die Liste zu blättern.

Ich habe versucht, mit setSelected() und scrollTo(x,y) und scrollBy(x,y), aber ohne Glück.

Ich habe gab auch einen Versuch zu diesem Stück Code, so hässlich, wie es ist, aber ich wollte nur f, es versuchen arbeitet:

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();

                }
            }
        });

Und das gab mir einen gewissen Erfolg, aber die Listview wurde dann verhalten verrückt in einer Weise, die ich bin nicht einmal in der Lage zu beschreiben ....

Jede Idee?

War es hilfreich?

Lösung

Versuchen Sie es an die Nachrichtenwarteschlange

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

Er arbeitete für mich in einem Scrollview ( überprüfen Sie diese Antwort ).

Andere Tipps

i gemacht Funktionen, die für andere für Listview Scrollen nützlich sein könnten, sie arbeiten in jeder Android-Version für mich, Emulator und Gerät, hier ist ItemHeight die feste Höhe Sicht in der Listenansicht.

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top