Android:如何为ListView的选定行中的2 TextView着色

时间:2016-05-02 17:24:16

标签: android listview audio-player android-music-player

我试图在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);
}

1 个答案:

答案 0 :(得分:1)

listview.getSelectedView()返回与当前所选项对应的视图,如果未选择任何内容,则返回null。

有关如何在列表视图中选择项目的详细信息,您可以看到此answer