手順3: Leanback対応Androidアプリのコンテンツを閲覧する
Fire TV対応Androidアプリの最も基本的なコンポーネントであるBrowseFragmentについて詳しく見てみましょう。
Android Studioアプリウィザードを使用して新しく作成したTV対応Androidアプリを起動すると、次のようなインターフェイスが表示されます。
ここで説明するすべての要素は、BrowseFragment
というクラス内で生成されます。BrowseFragment
は、ビデオや映画をはじめとするアプリ内のコンテンツをユーザーが簡単に閲覧できるようにするためのインターフェイスを作成します。
BrowseFragment
自体は、HeadersFragment
とRowsFragment
という2つのサブフラグメントで構成されます。
HeadersFragment
は各コンテンツ行のヘッダーです。ヘッダーは表示と非表示の切り替えが可能です。多くの場合、HeadersFragmentには、その行に表示されるコンテンツの「カテゴリー」が含まれます。
RowsFragment
には、通常、ビデオサムネイルとして表示されるコンテンツ行が含まれます。ここでは、ObjectAdapter
を使用して、これらのコンテンツ行を設定する方法を説明します。
BrowseFragment
の設定
コンテンツ行は、Adapterによって作成される水平方向のリストです。アプリのルックアンドフィールを定義するPresenterクラスを使用してコンテンツが表示されます。
単一行のコンテンツを設定するには、ArrayObjectAdapter
を使用してlistRowAdapter
を呼び出します。このアダプターは、単一行のコンテンツを表示する役割を担います。
この例では、タイトルや説明など、映画に関するすべての情報を含む「movie」クラスも定義しています。
最後に、HeaderItem
を使用して各行のヘッダーを定義します。たとえば、「コメディ」カテゴリーを定義できます。
次の図は、listRowAdapter
とHeaderItem
の構成を示しています。
映画のリストを作成し、それをAdapterに渡すSetupMovies
メソッドがあるとします。以下のコードでは、単一の行を設定してヘッダー項目を定義します。
public class MainFragment extends BrowseFragment {
private void loadRows() {
//映画のリストを生成しましょう
List list = MovieList.setupMovies();
//CardPresenterは行内の項目のUIを定義します
CardPresenter cardPresenter = new CardPresenter();
//行のアダプターを作成します
ArrayObjectAdapter listRowAdapter
= new ArrayObjectAdapter(cardPresenter);
//Adapterを設定します
for (Movie movie:list) {
listRowAdapter.add(movie);
}
//この行のヘッダーを作成します
HeaderItem header = new HeaderItem(0, "コメディ");
}
}
通常、メディアストリーミングアプリには1行以上のコンテンツが含まれています。したがって、BrowseFragment
に複数のアダプターを追加する必要があります。これを行う最も簡単な方法は、複数のListRowAdapter
を管理できる上位レベルのアダプターを設定することです。このクラスをRowsAdapter
と呼ぶことにしましょう。
RowsAdapter
には複数のListRowAdapter
が含まれ、コンテンツの表示方法(水平方向)を定義する独自のPresenterがあります。
複数のlistRowを追加し、listRowAdapter
と関連するHeaderItem
を組み合わせることによって、RowsAdapter
を設定します。それには、HeaderItem
とArrayObjectAdapter
をパラメーターとして受け取るListRowクラスを使用します。
public class MainFragment extends BrowseFragment {
...
//RowsAdapterを作成します
ArrayObjectAdapter rowsAdapter
= new ArrayObjectAdapter(new ListRowPresenter());
//複数の行を追加します
rowsAdapter.add(new ListRow(headerItem1, listRowAdapter1));
rowsAdapter.add(new ListRow(headerItem2, listRowAdapter2));
setAdapter(mRowsAdapter);
}
setAdapter
を呼び出すと、設定したすべての行がBrowseFragment
に取り込まれ、メインインターフェイスとして表示されます。