in Leanback/app/src/main/java/com/example/android/tvleanback/ui/MainFragment.java [238:304]
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
if (data != null && data.moveToFirst()) {
final int loaderId = loader.getId();
if (loaderId == CATEGORY_LOADER) {
// Every time we have to re-get the category loader, we must re-create the sidebar.
mCategoryRowAdapter.clear();
// Iterate through each category entry and add it to the ArrayAdapter.
while (!data.isAfterLast()) {
int categoryIndex =
data.getColumnIndex(VideoContract.VideoEntry.COLUMN_CATEGORY);
String category = data.getString(categoryIndex);
// Create header for this category.
HeaderItem header = new HeaderItem(category);
int videoLoaderId = category.hashCode(); // Create unique int from category.
CursorObjectAdapter existingAdapter = mVideoCursorAdapters.get(videoLoaderId);
if (existingAdapter == null) {
// Map video results from the database to Video objects.
CursorObjectAdapter videoCursorAdapter =
new CursorObjectAdapter(new CardPresenter());
videoCursorAdapter.setMapper(new VideoCursorMapper());
mVideoCursorAdapters.put(videoLoaderId, videoCursorAdapter);
ListRow row = new ListRow(header, videoCursorAdapter);
mCategoryRowAdapter.add(row);
// Start loading the videos from the database for a particular category.
Bundle args = new Bundle();
args.putString(VideoContract.VideoEntry.COLUMN_CATEGORY, category);
mLoaderManager.initLoader(videoLoaderId, args, this);
} else {
ListRow row = new ListRow(header, existingAdapter);
mCategoryRowAdapter.add(row);
}
data.moveToNext();
}
// Create a row for this special case with more samples.
HeaderItem gridHeader = new HeaderItem(getString(R.string.more_samples));
GridItemPresenter gridPresenter = new GridItemPresenter(this);
ArrayObjectAdapter gridRowAdapter = new ArrayObjectAdapter(gridPresenter);
gridRowAdapter.add(getString(R.string.grid_view));
gridRowAdapter.add(getString(R.string.guidedstep_first_title));
gridRowAdapter.add(getString(R.string.error_fragment));
gridRowAdapter.add(getString(R.string.personal_settings));
ListRow row = new ListRow(gridHeader, gridRowAdapter);
mCategoryRowAdapter.add(row);
startEntranceTransition(); // TODO: Move startEntranceTransition to after all
// cursors have loaded.
} else {
// The CursorAdapter contains a Cursor pointing to all videos.
mVideoCursorAdapters.get(loaderId).changeCursor(data);
}
} else {
// Start an Intent to fetch the videos.
Intent serviceIntent = new Intent(getActivity(), FetchVideoService.class);
getActivity().startService(serviceIntent);
}
}