先日Android TVに触れる機会があったので、画像サムネイルを縦に表示したときのメモ。
PresenterとFragmentを準備
VerticalGridFragmentを継承したFragmentでVerticalGridPresenterを使う
VerticalGridPresenter gridPresenter = new VerticalGridPresenter();
gridPresenter.setNumberOfColumns(1);
setGridPresenter(gridPresenter);
mAdapter = new ArrayObjectAdapter(new CardPresenter());
int count = 0;
for (ImageItem item : list) {
mAdapter.add(count++, item);
}
setAdapter(mAdapter);
setOnItemViewClickedListener(new ItemViewClickedListener());
setOnItemViewSelectedListener(new ItemViewSelectedListener());
表示用のCardPresenterを作る
public class CardPresenter extends Presenter {
private ImageLoader mImageLoader;
@Override
public ViewHolder onCreateViewHolder(final ViewGroup parent) {
// 今回は単なるImageViewのみ追加。別途TextViewとかも入れられる
ImageView imageView = new ImageView(parent.getContext());
// 中略...
return new ViewHolder(imageView);
}
@Override
public void onBindViewHolder(final ViewHolder viewHolder, final Object item) {
// Objectとして渡されるitemからurl文字列取ったり、いろいろ
ImageItem data = (ImageItem) item;
ImageView imageView = (ImageView) viewHolder.view;
ImageLoader.ImageListener listener = ImageLoader.getImageListener(
imageView, R.drawable.something, R.drawable.something);
mImageLoader.get(item.getUrl, listener);
// 中略...
}
@Override
public void onUnbindViewHolder(final ViewHolder viewHolder) {
}
}
VerticalGridFragmentをaddする
任意のレイアウトにfragmentTransaction.addとかreplaceする。
d-padで選択されたときに何かしたい場合はリスナー追加してイベント受け取ればいい。
private final class ItemViewClickedListener implements OnItemViewClickedListener {
@Override
public void onItemClicked(final Presenter.ViewHolder itemViewHolder, final Object item,
final RowPresenter.ViewHolder rowViewHolder, final Row row) {
// Clickされた時の何か
}
}
private final class ItemViewSelectedListener implements OnItemViewSelectedListener {
@Override
public void onItemSelected(final Presenter.ViewHolder itemViewHolder, final Object item,
final RowPresenter.ViewHolder rowViewHolder, final Row row) {
// 選択された時の何か
}
}
PhoneやTabletと全然違って難しく、合ってるか分からないけどとりあえず表示は出来た。