2016-06-13 22 views
2

Ich habe ein Fragment:das letzte Element in der Reihe BrowseFragment

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

In BrowseFragment ich mehrere Zeilen mit Artikel hinzufügen:

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); 
} 

Ich installierte OnItemViewSelectedListener Zuhörer:

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

    setOnItemViewSelectedListener(new ItemViewSelectedListener()); 

Überschreibung Methode onItemSelected:

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

I erkennen müssen, wenn das letzte Element in der Zeile ausgewählt ist. Wie ermittle ich das?

+0

Unvollständige Frage, bitte Ihren ganzen Code setzen, und über Ihr Problem genauer sein. – Neo

+0

Hinzugefügt zusätzliche Methoden in Frage –

Antwort

4

Sie können alle Informationen, die Sie aus dem Row row, Object item und die ArrayObjectAdapter auf der brauchen erhalten, die wieder in den onItemSelected(...) Ereignis übergeben werden.

Etwas wie:

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 
} 
+0

Danke für die Antwort! Aber es gibt keine Methode der Klasse 'Row'' getArrayAdapter() '. –

+0

Ich habe gerade eine Bearbeitung vorgenommen, um das Problem zu beheben. Die ['ListRow'] (https://developer.android.com/reference/android/support/v17/leanback/widget/ListRow.html) hat die' getAdapter() 'Methode. Vielleicht möchten Sie den Cast in eine 'instanceof'-Prüfung einbinden, um sicher zu sein, aber basierend auf dieser Zeile: 'mRowsAdapter.add (new ListRow (header, listRowAdapter));', sollten Sie sich sicher sein. –

+0

** Alles funktioniert! Vielen Dank! ** P. S. Korrigiert den Namen des Variablenindex im 'if'-Block. –