Leanback対応Androidアプリのコンテンツの閲覧


Leanback対応Androidアプリのコンテンツの閲覧

最終更新日:2016年9月

Android Studioアプリウィザードを使用して新しく作成したTV対応Androidアプリを起動すると、次のようなインターフェイスが表示されます。

TV対応Androidアプリを起動すると、このようなインターフェイスが表示されます。

ここで説明するすべての要素は、BrowseFragmentというクラス内で生成されます。BrowseFragmentは、ビデオや映画をはじめとするアプリ内のコンテンツをユーザーが簡単に閲覧できるようにするためのインターフェイスを作成します。

BrowseFragment自体は、HeadersFragmentとRowsFragmentという2つのサブフラグメントで構成されます。

BrowseFragment自体は、HeadersFragmentとRowsFragmentという2つのサブフラグメントで構成されます。

HeadersFragmentは各コンテンツ行のヘッダーです。ヘッダーは表示と非表示の切り替えが可能です。多くの場合、HeadersFragmentには、その行に表示されるコンテンツの「カテゴリー」が含まれます。

RowsFragmentには、通常、ビデオサムネイルとして表示されるコンテンツの行が含まれます。ここでは、ObjectAdapterを使用して、これらのコンテンツ行を設定する方法を説明します。

BrowseFragmentの設定

コンテンツ行は、Adapterによって作成される水平方向のリストです。アプリのルックアンドフィールを定義するPresenterクラスを使用してコンテンツが表示されます。

単一の行のコンテンツを設定するには、ArrayObjectAdapterを使用してlistRowAdapterを呼び出します。このアダプターは、単一の行のコンテンツを表示します。

この例では、タイトルや説明など、映画に関するすべての情報を含む「movie」クラスも定義しています。

最後に、HeaderItemを使用して各行のヘッダーを定義します。たとえば、「コメディ」カテゴリーを定義できます。

次の図は、listRowAdapterと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があります。

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に取り込まれ、メインインターフェイスとして表示されます。

TV対応Androidアプリを起動すると、このようなインターフェイスが表示されます。