2

I have a Fragment:

public class FilmFragment extends BrowseFragment implements LoaderManager.LoaderCallbacks<Object>

In BrowseFragment I add several rows with items:

private void loadRubricsFilms(List<Rubric> mRubrics, List<Film> mFilms) {
    int j = 0;

    for (Rubric mRubric : mRubrics) {
        ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(mCardPresenter);

        for (Film mFilm : mFilms) {
            if (mFilm.getRubric() == mRubric.getId()) {
                listRowAdapter.add(mFilm);
            }
        }
        HeaderItem header = new HeaderItem(j++, mRubric.getTitle());
        mRowsAdapter.add(new ListRow(header, listRowAdapter));
    }
    setAdapter(mRowsAdapter);
}

I installed OnItemViewSelectedListener listener:

    private final class ItemViewSelectedListener implements OnItemViewSelectedListener {
    @Override
    public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
                               RowPresenter.ViewHolder rowViewHolder, Row row) {
    }
}

    setOnItemViewSelectedListener(new ItemViewSelectedListener());

override method onItemSelected:

    @Override
    public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
                               RowPresenter.ViewHolder rowViewHolder, Row row) {
    }

I need to detect when the last item in the row is selected. How do I determine it?

Andrei Anhurets
  • 143
  • 1
  • 13

1 Answers1

5

You can get all the information you need out of the Row row, Object item, and the ArrayObjectAdapter on the Row that are handed back in the onItemSelected(...) event.

Something like:

final ListRow listRow = (ListRow) row;
final ArrayObjectAdapter currentRowAdapter = listRow.getAdapter();
int selectedIndex = currentRowAdapter.indexOf(item);
if (selectedIndex != -1 && (currentRowAdapter.size() - 1) == selectedIndex ) {
    // The last item was selected
}
Andrei Anhurets
  • 143
  • 1
  • 13
Kyle Venn
  • 4,597
  • 27
  • 41
  • Thanks for the answer! But there is no method of class `Row` `getArrayAdapter ()`. – Andrei Anhurets Jun 14 '16 at 09:00
  • I just made an edit to fix the issue. The [`ListRow`](https://developer.android.com/reference/android/support/v17/leanback/widget/ListRow.html) has the `getAdapter()` method. You might want to wrap the cast in an `instanceof` check just to be sure, but based on this line: `mRowsAdapter.add(new ListRow(header, listRowAdapter));`, you should be safe. – Kyle Venn Jun 14 '16 at 12:41
  • **Everything is working! Thank you so much!** P.S. Corrected the name of the variable index in the `if` block. – Andrei Anhurets Jun 14 '16 at 12:59