我在Android TV应用程序中使用Google Leanback小部件 . 它使用带有ListRows的RowsFragment .
我想要确定的是,是否有任何方法可以以编程方式滚动到其中一行中的特定对象 . 我已经挖掘了Leanback小部件的文档,但无法找到我正在寻找的东西 .
我有类似的必要性:我需要在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); } }
希望这会对你有所帮助 .
在最新版本的Leanback(想想v23.3.0)中,您现在不仅可以指定行位置,还可以在行上执行可选任务 . 在您的情况下,任务将是程序化选择,如下所示:
BrowseFragment.setSelectedPosition(0, true, new ListRowPresenter.SelectItemViewHolderTask(2));
无需实现自定义列表行演示者或任何东西
当我需要实现“通过按返回返回到第一行中的第一项”时,我已经完成了 .
我在Activity的 onBackPressed() 中调用了这个方法 .
如果此方法返回 false ,则调用Activity.super.onBackPressed() . 如果 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”,您可以设置您需要的任何位置 .
3 回答
我有类似的必要性:我需要在ListRow中设置初始选定的项目 . 我最终继承了ListRowPresenter的子类,如下所示:
希望这会对你有所帮助 .
在最新版本的Leanback(想想v23.3.0)中,您现在不仅可以指定行位置,还可以在行上执行可选任务 . 在您的情况下,任务将是程序化选择,如下所示:
BrowseFragment.setSelectedPosition(0, true, new ListRowPresenter.SelectItemViewHolderTask(2));
无需实现自定义列表行演示者或任何东西
当我需要实现“通过按返回返回到第一行中的第一项”时,我已经完成了 .
我在Activity的 onBackPressed() 中调用了这个方法 .
如果此方法返回 false ,则调用Activity.super.onBackPressed() . 如果 true - 我们没有 .
而不是“0”,您可以设置您需要的任何位置 .