5

J'utilise le projet par défaut pour Android TV. Voici le code pour créer des cartes dans mon BrowseFragment:Comment utiliser setRowViewSelected de ListRowPresenter

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

que je fais ce que je ne veux pas faire la première carte de la ligne sélectionnée se lance quand je application. Il ne doit être sélectionné qu'après avoir appuyé sur le bouton Dpad. Si je ne peux pas le faire de cette façon, que dois-je faire pour avoir un comportement mentionné?

+1

Vous pouvez demander le focus sur un élément différent sur l'écran - comme le SearchOrb. Ou personnalisez le BackgroundManager pour ne pas toujours afficher l'image en arrière-plan. –

Répondre

2

Vous pouvez setRowViewSelected par le sous-classement ListRowPresenter et dominante initializeRowViewHolder(RowPresenter.ViewHolder holder)

@Override 
protected void initializeRowViewHolder(RowPresenter.ViewHolder holder) { 
    super.initializeRowViewHolder(holder); 

    setRowViewSelected(holder, false); 
} 

Mais je ne pense pas que vous pouvez désélectionner tous les éléments en BrowseFragment utilisant cette approche.

Essayez de définir votre ItemViewSelectedListener après le chargement de vos données au lieu de définir onActivityCreated pour que tous les éléments ne soient pas sélectionnés lors du lancement initial.

Raison possible pourquoi élément en haut à gauche de la ligne seront toujours sélectionnée par défaut et vous ne pouvez pas avoir tous les éléments non sélectionnés lors du lancement initial:

méthode de onItemSelectedBrowseFragment (line 1372-1382) lors du lancement initial appelle mMainFragmentRowsAdapter.getSelectedPosition()

@Override 
    public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, 
      RowPresenter.ViewHolder rowViewHolder, Row row) { 
     int position = mMainFragmentRowsAdapter.getSelectedPosition(); //<-- 
     if (DEBUG) Log.v(TAG, "row selected position " + position); 
     onRowSelected(position); 
     if (mExternalOnItemViewSelectedListener != null) { //<-- 
      mExternalOnItemViewSelectedListener.onItemSelected(itemViewHolder, item, 
        rowViewHolder, row); 
     } 
    } 

getSelectedPosition() retourne toujours 0 (line 483-485)

public int getSelectedPosition() { 
     return 0; 
    } 

Il appelle également mExternalOnItemViewSelectedListener.onItemSelectedmExternalOnItemViewSelectedListener est le ItemViewSelectedListener que vous définissez dans MainFragment de votre application.

Ainsi, lors du lancement initial, le 0ème élément de la 0ème ligne est sélectionné comme élément sélectionné par défaut mais si vous retardez le réglage mExternalOnItemViewSelectedListener, cet appel n'atteindra pas votre écouteur sélectionné par élément la première fois.

0

Vous pouvez utiliser cette méthode de rappel. Appelée lorsque la vue de ligne donnée change d'état de sélection. Une sous-classe peut remplacer cette réponse pour répondre aux changements d'état sélectionnés d'une ligne. Une sous-classe peut apporter des modifications visuelles à la vue Ligne mais ne doit pas créer d'animation dans la vue Ligne.

mListRowPresenter.setRowViewSelected(vh, false); 

pourquoi vous désélectionnez initialement? Je n'ai pas compris votre question. Pouvez-vous expliquer ce que vous voulez faire exactement?

+0

Chose est que lorsque nous lançons cette application, l'élément en haut à gauche sera sélectionné par défaut et son image d'arrière-plan sera affiché. Ce que je dois faire est que je dois montrer l'image de fond différente jusqu'à ce que l'utilisateur choisissent n'importe quel article de carte. – astuter