android - 如何处理 MediaPlayer 和 BaseAdapter

标签 android android-mediaplayer baseadapter

我正在实现来自 this tutorial 的音乐应用程序.

有一个BaseAdapter类用来显示轨道列表,还有一个MusicPlayer类用来播放音乐。两者都是我的主要 Activity 类的变量。

public class MainActivity extends Activity implements MediaPlayerControl{
       private MediaPlayer musicSrv;
       private BaseAdapter songAdt;
       ...

MusicPlayer 在当前完成时播放下一首轨道。向 BaseAdapter 发送消息以更改每个新播放轨道的显示(例如更改当前轨道的颜色)的最佳方法是什么?

编辑

根据评论,使用接口(interface)good似乎是个不错的选择。有人可以写一个详细的答案来解释如何做吗?谢谢。

最佳答案

感谢评论,我设法实现了一个带有接口(interface)的解决方案。

这是我的主要 Activity 类,每次更改歌曲时都会刷新 BaseAdapater:

public class MainActivity extends Activity implements MusicService.SongChangedListener {
      private MediaPlayer musicSrv;
      private BaseAdapter songAdt;
      ...

      @Override
      public void songChanged(Song currentSong){
           songAdt.notifyDataSetChanged(); // refresh view
      }

还有我的 MusicService 类:

public class MusicService extends Service implements MediaPlayer.OnPreparedListener{
...
private MainActivity activity;
...

public void setActivity(MainActivity act){
    //set the activity
    activity = act;
}

public interface SongChangedListener {
     void songChanged(Song song);
}
...
public void playSong(){ 
       // this function is called each time a new song is played
       activity.songChanged(playSong);
       ...
}

关于android - 如何处理 MediaPlayer 和 BaseAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38052849/

相关文章:

android - 如何检查android中的root访问权限?

java - 等待声音结束后再继续

java - 点击多个播放声音的按钮时出现错误 (1, 19)

java - 列表值对 BaseAdapter 类不可见

android - 我的适配器如何知道 notifydatasetchanged

android - 如何确定 ListView fling 何时变慢

android - 在 Delphi Firemonkey 移动应用程序中读写 inifile?

android - 如何更改 scrollView 中的 View 位置,以将其固定在屏幕顶部

android - 使用 Retrofit 和 execute() 从错误响应中获取正文

java - 如何扫描所有 mp3 文件,而不仅仅是从我制作的 android 媒体播放器的特定路径