2014-04-30 153 views
0

非常愚蠢的问题。我习惯于PHP。结合多个相同的Java功能

我声明了多个android MediaPlayer对象。 基于按下按钮,我想在它们之间切换。我现在有3个相同的功能 - 这样的事情...

public void playSound3() throws IOException { 
    if(sound3.isPlaying()) { 
     sound3.stop(); 
     sound3.reset(); 
    } 
} 

这就是所谓的与playSound3()

我想结合这是playSound(1),但找不出了解如何在MediaPlayer对象的情况下做到这一点。

任何帮助将不胜感激。

+0

仅在看一种方法时很难重构。你将不得不分享更多的代码。 – jgitter

回答

0

将声音作为参数传递。

// Not sure what type your sound is. 
public void playSound(MediaPlayer sound) throws IOException { 
    if(sound.isPlaying()) { 
     sound.stop(); 
     sound.reset(); 
    } 
} 
0

试试这个:

public void playSound(MediaPlayer sound) throws IOException 
{ 
    if(sound.isPlaying()) 
    { 
     sound.stop(); 
     sound.reset(); 
    } 
} 

然后

playSound(sound1); 
playSound(sound2); 
&c 
0

如果你确实需要的参数是int,你可以把你的MediaPlayer对象到一个数组:

public void playSound(int n) throws IOException { 
    static MediaPlayer[] mediaPlayers = {sound0,sound1,sound2,sound3}; 

    if (n >= 0 && n < mediaPlayers.length) { 
     MediaPlayer mp = mediaPlayers[n]; 
     if(mp.isPlaying()) { 
      mp.stop(); 
      mp.reset(); 
     } 
    } 
} 
0

创建一个接口,如

public Interface IMySoundPlayer { 
    void playSound() throws IOException; 
} 

创建阵列的所述界面对象和填充它

IMySoundPlayer[] soundPlayers = new IMySoundPlayer[] { new SoundPlayer(sound1), new SoundPlayer(sound2), new SoundPlayer(sound3) }; 

随着声音播放为沿

public class SoundPlayer implements IMySoundPlayer { 
    private MediaPlayer mBackend; 

    public SoundPlayer(MediaPlayer backend) { 
     mBackend = backend; 
    } 

    public void playSound() throws IOException { 
     if(mBackend.isPlaying()) { 
      mBackend.stop(); 
      mBackend.reset(); 
     } 
    } 
} 

旋转的3个实例之间的行的东西使用整数或一些其他计划并在每个计划上致电playSound

评论是否需要更多指导。

免责声明

这已经把我的头,没有测试(甚至没有语法)的顶部做。

0

使用某种列表或数组来存储您的MediaPlayer对象,然后让您的方法以MediaPlayer作为其参数。然后,您可以将所需数组的任何元素传递给单个方法。

MediaPlayer[] players = {sound1, sound2, sound3}; 

public void playSound(MediaPlayer sound) throws IOException { 
    if(sound.isPlaying()) { 
     sound.stop(); 
     sound.reset(); 
    } 
} 

// Call method using sound1 
playSound(players[0]);