アプリの Leanback サポートを開始しています。UI 要件に従って、各ヘッダーに対応する複数のリスト行を追加する必要があります。これは、Android TV で Youtube アプリが行うこととまったく同じです。デフォルトの ListRowPresenterは、1 つのリスト行とそのヘッダーのみをレンダリングしているようです。複数のリスト行をサポートするプレゼンターはありますか? 各項目に RowsFragment が埋め込まれたカスタム プレゼンターを作成する行について考えています。私のアプローチが間違っている場合は修正してください。
2 に答える
Leanback チームは最近ListRow
、1 つHeaderItem
のバージョン24.0.0
のライブラリに対して複数の のサポートを追加しました。RowsFragment
にマップする を指定できますHeaderItem
。Leanback ショーケースでその例を見ることができます。具体的には、ここに例を提供するファイルがあります。
どの Fragments がどのsにマップされるかを指定PageRowFragmentFactory
する必要がある new があります。そのようです:BrowseFragment
HeaderItem
@Override
public Fragment createFragment(Object rowObj) {
Row row = (Row)rowObj;
mBackgroundManager.setDrawable(null);
if (row.getHeaderItem().getId() == HEADER_ID_1) {
return new SampleFragmentA();
} else if (row.getHeaderItem().getId() == HEADER_ID_4) {
return new WebViewFragment();
}
throw new IllegalArgumentException(String.format("Invalid row %s", rowObj));
}
上記のメソッドで a のインスタンスを返すだけで、複数の s を含む を 1 つの にマップするRowsFragment
ことができます。RowsFragment
ListRow
HeaderItem
現時点では、バージョン 24.0.0 の Leanback を使用して、gradle ファイルに次の行を追加することで、この優れた機能にアクセスできます。
compile 'com.android.support:leanback-v17:24.0.0
警告が表示される場合がありますが、今のところ無視しても問題ありません。
また24.0.0
、Leanback のバージョンには、おしゃれなトランジション アニメーションやよりクリーンな API など、他にも非常に優れた機能がたくさんあります。上記でリンクしたサンプル プロジェクトにすべて含まれています。また、Google I/O からの追加機能についての講演もあります。
複数のリスト行をサポートするプレゼンターはありますか?
私が知っていることではありません。問題は、BrowseFragment がそのサブクラスの子のみを受け入れることRow
です。このため、BrowseFragment の各エントリには 1 つの行 (およびそれぞれのヘッダー) しか存在できません。
各項目に RowsFragment が埋め込まれたカスタム プレゼンターを作成する行について考えています。私のアプローチが間違っている場合は修正してください。
先ほど述べたように、カスタム プレゼンターを作成しても効果があるとは思えません。
これまでに思いついた唯一の解決策は、BrowseFragment のカスタム バージョンを ( RowsFragment
andHeadersFragment
クラスを手動で拡張して) 作成し、あらゆるタイプのフラグメントをサポートすることです。
興味があれば、プロセスに関する一連の記事を書きました https://medium.com/building-for-android-tv/
BrowseFragment のカスタム バージョンを提供するベース プロジェクトhttps://github.com/dextorer/BuildingForAndroidTV
また、このカスタム コンポーネントを使いやすくするためのライブラリを作成することも検討しています。