SupportLeanbackDemo: support delay loading page fragment data
Matching ag/989598 to notifyDataReady() when page fragment has
loaded its data.
Also fixed a bug using the wrong FragmentManager to open
GuidedStepFragment.
Bug 28471536
Change-Id: I561db19130d8ed0439d0f1ab74b922e0698c3180
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java
index ba6abc0..b2c45f4 100644
--- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java
+++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java
@@ -228,7 +228,7 @@
public Fragment createFragment(Object rowObj) {
Row row = (Row) rowObj;
if (row.getHeaderItem().getId() == HEADER_ID1) {
- return new SampleFragment();
+ return new SampleRowsFragment();
} else if (row.getHeaderItem().getId() == HEADER_ID2) {
return new SampleRowsFragment();
} else if (row.getHeaderItem().getId() == HEADER_ID3) {
@@ -239,30 +239,30 @@
}
}
- public static class PageFragmentAdapterImpl extends MainFragmentAdapter<SampleFragment> {
-
- public PageFragmentAdapterImpl(SampleFragment fragment) {
- super(fragment);
- setScalingEnabled(true);
- }
-
- @Override
- public void setEntranceTransitionState(boolean state) {
- getFragment().setEntranceTransitionState(state);
- }
- }
-
public static class SampleRowsFragment extends RowsFragment {
final CardPresenter mCardPresenter = new CardPresenter();
final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme);
- public SampleRowsFragment() {
- ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter());
+ void loadFragmentData() {
+ ArrayObjectAdapter adapter = (ArrayObjectAdapter) getAdapter();
for (int i = 0; i < 4; i++) {
ListRow row = new ListRow(new HeaderItem("Row " + i), createListRowAdapter(i));
adapter.add(row);
}
+ if (getMainFragmentAdapter() != null) {
+ getMainFragmentAdapter().getFragmentHost().notifyDataReady(getMainFragmentAdapter());
+ }
+ }
+
+ public SampleRowsFragment() {
+ ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter());
setAdapter(adapter);
+ // simulates late data loading:
+ new Handler().postDelayed(new Runnable() {
+ public void run() {
+ loadFragmentData();
+ }
+ }, 500);
setOnItemViewClickedListener(new OnItemViewClickedListener() {
@Override
@@ -274,12 +274,12 @@
Intent intent;
Bundle bundle;
if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) {
- GuidedStepFragment.add(getFragmentManager(),
+ GuidedStepFragment.add(getActivity().getFragmentManager(),
new GuidedStepHalfScreenActivity.FirstStepFragment(),
R.id.lb_guidedstep_host);
return;
} else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) {
- GuidedStepFragment.add(getFragmentManager(),
+ GuidedStepFragment.add(getActivity().getFragmentManager(),
new GuidedStepActivity.FirstStepFragment(), R.id.lb_guidedstep_host);
return;
} else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) {
@@ -339,6 +339,19 @@
}
}
+ public static class PageFragmentAdapterImpl extends MainFragmentAdapter<SampleFragment> {
+
+ public PageFragmentAdapterImpl(SampleFragment fragment) {
+ super(fragment);
+ setScalingEnabled(true);
+ }
+
+ @Override
+ public void setEntranceTransitionState(boolean state) {
+ getFragment().setEntranceTransitionState(state);
+ }
+ }
+
public static class SampleFragment extends Fragment implements MainFragmentAdapterProvider {
final PageFragmentAdapterImpl mMainFragmentAdapter = new PageFragmentAdapterImpl(this);
@@ -373,14 +386,10 @@
}
@Override
- public void onStart() {
- super.onStart();
- mMainFragmentAdapter.getFragmentHost().notifyViewCreated(mMainFragmentAdapter);
- }
-
- @Override
public void onViewCreated(View view, Bundle savedInstanceState) {
- setEntranceTransitionState(mEntranceTransitionState);
+ // static layout has view and data ready immediately
+ mMainFragmentAdapter.getFragmentHost().notifyViewCreated(mMainFragmentAdapter);
+ mMainFragmentAdapter.getFragmentHost().notifyDataReady(mMainFragmentAdapter);
}
@Override
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseSupportFragment.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseSupportFragment.java
index 58477d1..ecf6d48 100644
--- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseSupportFragment.java
+++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseSupportFragment.java
@@ -230,7 +230,7 @@
public Fragment createFragment(Object rowObj) {
Row row = (Row) rowObj;
if (row.getHeaderItem().getId() == HEADER_ID1) {
- return new SampleFragment();
+ return new SampleRowsSupportFragment();
} else if (row.getHeaderItem().getId() == HEADER_ID2) {
return new SampleRowsSupportFragment();
} else if (row.getHeaderItem().getId() == HEADER_ID3) {
@@ -241,30 +241,30 @@
}
}
- public static class PageFragmentAdapterImpl extends MainFragmentAdapter<SampleFragment> {
-
- public PageFragmentAdapterImpl(SampleFragment fragment) {
- super(fragment);
- setScalingEnabled(true);
- }
-
- @Override
- public void setEntranceTransitionState(boolean state) {
- getFragment().setEntranceTransitionState(state);
- }
- }
-
public static class SampleRowsSupportFragment extends RowsSupportFragment {
final CardPresenter mCardPresenter = new CardPresenter();
final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme);
- public SampleRowsSupportFragment() {
- ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter());
+ void loadFragmentData() {
+ ArrayObjectAdapter adapter = (ArrayObjectAdapter) getAdapter();
for (int i = 0; i < 4; i++) {
ListRow row = new ListRow(new HeaderItem("Row " + i), createListRowAdapter(i));
adapter.add(row);
}
+ if (getMainFragmentAdapter() != null) {
+ getMainFragmentAdapter().getFragmentHost().notifyDataReady(getMainFragmentAdapter());
+ }
+ }
+
+ public SampleRowsSupportFragment() {
+ ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter());
setAdapter(adapter);
+ // simulates late data loading:
+ new Handler().postDelayed(new Runnable() {
+ public void run() {
+ loadFragmentData();
+ }
+ }, 500);
setOnItemViewClickedListener(new OnItemViewClickedListener() {
@Override
@@ -276,12 +276,12 @@
Intent intent;
Bundle bundle;
if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) {
- GuidedStepSupportFragment.add(getFragmentManager(),
+ GuidedStepSupportFragment.add(getActivity().getFragmentManager(),
new GuidedStepSupportHalfScreenActivity.FirstStepFragment(),
R.id.lb_guidedstep_host);
return;
} else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) {
- GuidedStepSupportFragment.add(getFragmentManager(),
+ GuidedStepSupportFragment.add(getActivity().getFragmentManager(),
new GuidedStepSupportActivity.FirstStepFragment(), R.id.lb_guidedstep_host);
return;
} else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) {
@@ -341,6 +341,19 @@
}
}
+ public static class PageFragmentAdapterImpl extends MainFragmentAdapter<SampleFragment> {
+
+ public PageFragmentAdapterImpl(SampleFragment fragment) {
+ super(fragment);
+ setScalingEnabled(true);
+ }
+
+ @Override
+ public void setEntranceTransitionState(boolean state) {
+ getFragment().setEntranceTransitionState(state);
+ }
+ }
+
public static class SampleFragment extends Fragment implements MainFragmentAdapterProvider {
final PageFragmentAdapterImpl mMainFragmentAdapter = new PageFragmentAdapterImpl(this);
@@ -375,14 +388,10 @@
}
@Override
- public void onStart() {
- super.onStart();
- mMainFragmentAdapter.getFragmentHost().notifyViewCreated(mMainFragmentAdapter);
- }
-
- @Override
public void onViewCreated(View view, Bundle savedInstanceState) {
- setEntranceTransitionState(mEntranceTransitionState);
+ // static layout has view and data ready immediately
+ mMainFragmentAdapter.getFragmentHost().notifyViewCreated(mMainFragmentAdapter);
+ mMainFragmentAdapter.getFragmentHost().notifyDataReady(mMainFragmentAdapter);
}
@Override