SupportLeanbackDemo: Fix crash of launch Detail from Search

Now DetailsFragment is expecting PhotoItem,  SearchFragment should not pass
a String to DetailsFragment.

Change-Id: I7794c6a14dcaa1de1d1177f3288bb7460a45bf7d
This commit is contained in:
Dake Gu
2014-09-26 16:25:27 -07:00
parent 91909fae54
commit 221b154a72

View File

@@ -3,13 +3,17 @@ package com.example.android.leanback;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v17.leanback.widget.ArrayObjectAdapter; import android.support.v17.leanback.widget.ArrayObjectAdapter;
import android.support.v17.leanback.widget.HeaderItem; import android.support.v17.leanback.widget.HeaderItem;
import android.support.v17.leanback.widget.ImageCardView;
import android.support.v17.leanback.widget.ListRow; import android.support.v17.leanback.widget.ListRow;
import android.support.v17.leanback.widget.ListRowPresenter; import android.support.v17.leanback.widget.ListRowPresenter;
import android.support.v17.leanback.widget.ObjectAdapter; import android.support.v17.leanback.widget.ObjectAdapter;
import android.support.v17.leanback.widget.OnItemClickedListener; import android.support.v17.leanback.widget.OnItemViewClickedListener;
import android.support.v17.leanback.widget.Presenter;
import android.support.v17.leanback.widget.Row; import android.support.v17.leanback.widget.Row;
import android.support.v17.leanback.widget.RowPresenter;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
@@ -32,7 +36,7 @@ public class SearchFragment extends android.support.v17.leanback.app.SearchFragm
setBadgeDrawable(getActivity().getResources().getDrawable(R.drawable.ic_title)); setBadgeDrawable(getActivity().getResources().getDrawable(R.drawable.ic_title));
setTitle("Leanback Sample App"); setTitle("Leanback Sample App");
setSearchResultProvider(this); setSearchResultProvider(this);
setOnItemClickedListener(new ItemClickedListener()); setOnItemViewClickedListener(new ItemViewClickedListener());
} }
@Override @Override
@@ -66,9 +70,9 @@ public class SearchFragment extends android.support.v17.leanback.app.SearchFragm
private void loadRows() { private void loadRows() {
for (int i = 0; i < NUM_ROWS; ++i) { for (int i = 0; i < NUM_ROWS; ++i) {
ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(new StringPresenter()); ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(new CardPresenter());
listRowAdapter.add("Hello world"); listRowAdapter.add(new PhotoItem("Hello world", R.drawable.gallery_photo_1));
listRowAdapter.add("This is a test"); listRowAdapter.add(new PhotoItem("This is a test", R.drawable.gallery_photo_2));
HeaderItem header = new HeaderItem(i, mQuery + " results row " + i, null); HeaderItem header = new HeaderItem(i, mQuery + " results row " + i, null);
mRowsAdapter.add(new ListRow(header, listRowAdapter)); mRowsAdapter.add(new ListRow(header, listRowAdapter));
} }
@@ -80,12 +84,19 @@ public class SearchFragment extends android.support.v17.leanback.app.SearchFragm
loadRows(); loadRows();
} }
}; };
private final class ItemClickedListener implements OnItemClickedListener {
public void onItemClicked(Object item, Row row) { private final class ItemViewClickedListener implements OnItemViewClickedListener {
// TODO: use a fragment transaction instead of launching a new @Override
// activity public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
RowPresenter.ViewHolder rowViewHolder, Row row) {
Intent intent = new Intent(getActivity(), DetailsActivity.class); Intent intent = new Intent(getActivity(), DetailsActivity.class);
startActivity(intent); intent.putExtra(DetailsActivity.EXTRA_ITEM, (PhotoItem) item);
Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
getActivity(),
((ImageCardView)itemViewHolder.view).getMainImageView(),
DetailsActivity.SHARED_ELEMENT_NAME).toBundle();
getActivity().startActivity(intent, bundle);
} }
} }
} }