我试图在Android中制作音乐播放器,昨天我想到了将当前正在播放的歌曲设置为ListView。
一开始我设置每次开始播放歌曲时,新的BaseAdapter会使用2 TextView(标题和艺术家)对布局进行充气,如果MediaPlayer中的歌曲相同,则2 TextView会变为蓝色。
它工作正常,但我注意到当我选择一首歌时,ListView立即滚动,因为重新创建了适配器。
在网上搜索我发现我可以在BaseAdapter类中创建一个新方法,如果我传递ListView和歌曲位置我可以给它上色,所以我只在onCreate方法中调用setAdapter(songList)。
是的,但它没有用。
-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 :(在OnCompletitionListener()的末尾调用)
public static void colorSongSelected(int position){
songAdapter.updateData(songView, position);
}
答案 0 :(得分:1)
listview.getSelectedView()返回与当前所选项对应的视图,如果未选择任何内容,则返回null。
有关如何在列表视图中选择项目的详细信息,您可以看到此answer