I am using default project for Android TV. Following is the code for creating cards in my BrowseFragment:
private void loadRows() {
List<Movie> list = MovieList.setupMovies();
ListRowPresenter mListRowPresenter = new ListRowPresenter();
mRowsAdapter = new ArrayObjectAdapter(mListRowPresenter);
mListRowPresenter.setRowViewSelected(/*HOW TO GET VIEWHOLDER HERE?*/, false);
CardPresenter cardPresenter = new CardPresenter();
int i;
for (i = 0; i < NUM_ROWS; i++) {
if (i != 0) {
Collections.shuffle(list);
}
ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(cardPresenter);
for (int j = 0; j < NUM_COLS; j++) {
listRowAdapter.add(list.get(j % 5));
}
HeaderItem header = new HeaderItem(i, MovieList.MOVIE_CATEGORY[i]);
mRowsAdapter.add(new ListRow(header, listRowAdapter));
}
setAdapter(mRowsAdapter);
}
I am doing this as I don't want to make first card of row get selected when I launch app. It should only get selected after user press down button on Dpad. If I can't do it this way, what should I do to get mentioned behavior?
You can
setRowViewSelectedby subclassing ListRowPresenter and overridinginitializeRowViewHolder(RowPresenter.ViewHolder holder)But I don't think you can unselect all items in
BrowseFragmentusing this approach.Try setting your
ItemViewSelectedListenerafter your data is loaded instead of setting inonActivityCreatedto have all items unselected on initial launch.Possible reason why top left item of row will always get selected by default and you cannot have all unselected items on initial launch:
BrowseFragment'sonItemSelectedmethod (line 1372-1382) on initial launch callsmMainFragmentRowsAdapter.getSelectedPosition()where
getSelectedPosition()always returns 0 (line 483-485)It also calls
mExternalOnItemViewSelectedListener.onItemSelectedwheremExternalOnItemViewSelectedListeneris the ItemViewSelectedListener that you set inMainFragmentof your app.So on initial launch, 0th item in 0th row gets selected as a default selected item but if you delay setting
mExternalOnItemViewSelectedListenerthis call will not reach your item selected listener the first time.