2014-04-30 151 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]);