2016-05-02 1 views
0

J'essaie de faire un lecteur de musique dans Android, et hier j'ai eu l'idée de définir la chanson en cours de lecture colorée dans le ListView. Au début, je définis que chaque fois que je démarre une chanson, un nouvel adaptateur BaseAdapter gonfle une mise en page avec 2 TextView (titre et artiste) et si la chanson est la même dans le MediaPlayer, les 2 TextView deviennent bleus.Android: Comment colorer les 2 TextView dans la rangée sélectionnée d'un ListView

Cela fonctionnait bien, mais j'ai remarqué que lorsque je sélectionne un morceau, le ListView défile immédiatement parce que l'adaptateur est recréé. Recherche sur le Web J'ai trouvé que je pouvais créer une nouvelle méthode dans la classe BaseAdapter, où si je passais le ListView et la position du morceau je pourrais le colorier, donc j'appellerais le setAdapter (songList) seulement dans la méthode onCreate .

Oui, mais cela ne fonctionne pas.

-SongAdapter:

public void updateData(ListView listView, int position){ 
    if (MainActivity.isMusicStarted) { 
     //These 2 lines of code return a NullPointerException 
     songView = (TextView) listView.getSelectedView().findViewById(R.id.song_title); 
     artistView = (TextView) listView.getSelectedView().findViewById(R.id.song_artist); 

     //The following 2 lines, if de-commented, color only the two TextView in the first shown row instead of the selected row 
     //songView = (TextView) listView.findViewById(R.id.song_title); 
     //artistView = (TextView) listView.findViewById(R.id.song_artist); 

     if (position==MusicService.getCurrentSong()) { 
      songView.setTextColor(ContextCompat.getColor(context, R.color.colorPrimary)); 
      artistView.setTextColor(ContextCompat.getColor(context, R.color.colorPrimary)); 
     } 
     else{ 
      songView.setTextColor(ContextCompat.getColor(context, android.R.color.primary_text_light)); 
      artistView.setTextColor(ContextCompat.getColor(context, android.R.color.secondary_text_light)); 
     } 
    } 
} 

-MainActivity: (appelé à la fin d'un OnCompletitionListener())

public static void colorSongSelected(int position){ 
    songAdapter.updateData(songView, position); 
} 

Répondre

1

listview.getSelectedView() retourne la vue correspondant à l'élément actuellement sélectionné, ou null si rien n'est sélectionné.

Pour plus d'informations sur la façon de sélectionner un élément dans la liste vous pouvez voir ceci answer