Android TV アプリケーションで Google Leanback ウィジェットを使用しています。ListRows を含む RowsFragment を利用します。
私が判断しようとしているのは、行の 1 つ内の特定のオブジェクトにプログラムでスクロールする方法があるかどうかです。Leanback ウィジェットのドキュメントを調べましたが、探しているものが見つかりません。
Android TV アプリケーションで Google Leanback ウィジェットを使用しています。ListRows を含む RowsFragment を利用します。
私が判断しようとしているのは、行の 1 つ内の特定のオブジェクトにプログラムでスクロールする方法があるかどうかです。Leanback ウィジェットのドキュメントを調べましたが、探しているものが見つかりません。
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」の代わりに、必要な任意の位置を設定できます。