ebr*_*ebr 13 android android-tv leanback
我在Android TV应用程序中使用Google Leanback小部件.它使用带有ListRows的RowsFragment.
我想要确定的是,是否有任何方法可以以编程方式滚动到其中一行中的特定对象.我已经挖掘了Leanback小部件的文档,但无法找到我正在寻找的东西.
小智 11
我有类似的必要性:我需要在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);
}
}
Run Code Online (Sandbox Code Playgroud)
希望这会对你有所帮助.
在最新版本的Leanback(想想v23.3.0 +)中,您现在不仅可以指定行位置,还可以在行上执行可选任务.在您的情况下,任务将是程序化选择,如下所示:
BrowseFragment.setSelectedPosition(0, true, new ListRowPresenter.SelectItemViewHolderTask(2));
无需实现自定义列表行演示者或任何东西
当我需要实现“按返回返回到一行中的第一项”时,我已经完成了。
我是从 Activity 的onBackPressed()调用这个方法的。
如果此方法返回false,我们将调用 Activity.super.onBackPressed()。如果是真的- 我们不会。
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;
}
Run Code Online (Sandbox Code Playgroud)
您可以设置所需的任何位置,而不是“0”。
归档时间: |
|
查看次数: |
4981 次 |
最近记录: |