2015-05-01 20 views
6

我在Android TV應用程序中使用Google Leanback小部件。它利用了ListFows中的RowsFragment。滾動到Android中的給定位置Leanback ListRow

我想確定的是,如果有任何方式編程滾動到其中一個行內的特定對象。我已經挖掘了Leanback小部件的文檔,但無法找到我要找的內容。

回答

5

我有類似的需要:我需要設置ListRow中的初始選定項目。 我結束了繼承的ListRowPresenter這樣的:

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

} 

希望這會幫助你。

+0

謝謝,我認爲這給了我需要做我想做的事情的信息。 – ebr

+0

該示例非常好,也可以修改要選擇的第一項背後的邏輯。謝謝 – Massimo

5

在最新版本的Leanback(think v23.3.0 +)中,您現在不僅可以指定行位置,還可以在行上執行可選任務。在你的情況下,任務將程序選擇像這樣:

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

無需實現自定義列表行的主持人或任何

+0

我的onActivityResult中的代碼行數如下:IllegalStateException:無法啓動標題轉換;任何幫助? – astuter

1

我已經做到了,當我需要實現「迴歸通過按Back鍵排列第一個項目「。

我從Activity的onBackPressed()中調用此方法。

如果此方法返回false我們調用Activity.super.onBackPressed()。 If true - 我們沒有。

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; 
} 

而不是「0」,你可以設置你需要的任何位置。