2015-05-01 4 views
6

Ich verwende die Google Leanback Widgets in einer Android TV-Anwendung. Es verwendet ein RowsFragment mit ListRows darin.Scrollen Sie zur angegebenen Position in Android Leanback ListRow

Ich versuche festzustellen, ob es eine Möglichkeit gibt, programmgesteuert zu einem bestimmten Objekt in einer der Zeilen zu scrollen. Ich habe in den Dokumenten für die Leanback-Widgets gegraben, kann aber nicht finden, wonach ich suche.

Antwort

5

Ich hatte eine ähnliche Notwendigkeit: Ich musste das erste ausgewählte Element in einer ListRow festlegen. Ich landete Subklassen die ListRowPresenter wie folgt aus:

import android.support.v17.leanback.widget.ListRowPresenter; 
import android.support.v17.leanback.widget.RowPresenter; 

public class CustomPresenter extends ListRowPresenter { 

    private int mInitialSelectedPosition; 

    public CustomPresenter(int position) { 
     this.mInitialSelectedPosition = position; 
    } 

    @Override 
    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) { 
     super.onBindRowViewHolder(holder, item); 

     ViewHolder vh = (ListRowPresenter.ViewHolder) holder; 
     vh.getGridView().setSelectedPosition(mInitialSelectedPosition); 
    } 

} 

Hoffentlich wird Ihnen helfen.

+0

Danke, ich denke, das gibt mir die Informationen, die ich tun muss, was ich wollte. – ebr

+0

Das Beispiel ist wirklich gut, es ist auch möglich, die Logik hinter dem ersten auszuwählenden Element zu ändern. Danke – Massimo

5

In der neuesten Version von Leanback (think v23.3.0 +) können Sie jetzt nicht nur die Zeilenposition angeben, sondern auch optionale Aufgaben in der Zeile ausführen. In Ihrem Fall wäre die Aufgabe programmatische Auswahl sein wie so:

BrowseFragment.setSelectedPosition(0, true, new ListRowPresenter.SelectItemViewHolderTask(2));

Keine Notwendigkeit, benutzerdefinierte Liste Reihe Moderatoren oder irgendetwas zu implementieren

+0

Gleiche Linie des Codes in meinem onActivityResult gibt: IllegalStateException: Kann Übergang der Überschriften nicht beginnen; irgendeine Hilfe? – astuter

1

ich es getan habe, als ich brauchte „, um die Rückkehr zu implementieren erstes Element in einer Zeile durch Drücken von Zurück ".

Ich rief diese Methode von Activity onBackPressed().

Wenn diese Methode false zurückgibt, rufen wir Activity.super.onBackPressed() auf. Wenn wahr - wir nicht.

public boolean onBackPressed(){ 
     boolean consumeBack; 

     int selectedRowPosition = getRowsFragment().getSelectedPosition(); 

     ListRowPresenter.ViewHolder selectedRow = (ListRowPresenter.ViewHolder) getRowsFragment().getRowViewHolder(selectedRowPosition); 
     int selectedItemPosition = selectedRow.getSelectedPosition(); 

     if(selectedItemPosition == 0){ 
      consumeBack = false; 
     } else { 
      consumeBack = true; 
      getRowsFragment().setSelectedPosition(selectedRowPosition, true, new ListRowPresenter.SelectItemViewHolderTask(0)); 
     } 
     return consumeBack; 
} 

Anstelle von "0" können Sie jede Position einstellen, die Sie benötigen.