2016-11-16 61 views
-1

這是一個樂器的程序。每個聲音有10個按鍵(按鈕),以及與其相關的其他媒體播放器。我爲每個鍵創建了一個方法,但正如你所看到的,代碼總是一樣的;唯一改變的是媒體播放器......這很好,但我問是否有更好的方式來做到這一點,更動態的東西?如何在Android中設置onclick視圖dinamically?

public void one() { 
    first = MediaPlayer.create(this, R.raw.dokey); 
    first.start(); 
    first.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
     public void onCompletion(MediaPlayer play) { 
      play.release(); 
     } 
    }); 
} 



    @Override 
public void onClick(View v) { 
    if(v==key1){ //key1 is the button 
     one();    
    } 
    //and so on... 
    } 
} 

回答

1

不知道你太多的代碼,我想你可以提取clicklistener,做這樣的事情:

private class OnKeyClickListener implements View.OnClickListener { 

    private MediaPlayer mMediaPlayer; 

    public OnKeyClickListener(MediaPlayer mediaPlayer) { 
     mMediaPlayer = mediaPlayer; 
    } 

    @Override public void onClick(View view) { 
     /// do the thing 
    } 
} 

而不是添加到鍵:

MediaPlayer mediaPlayer1 = new MediaPlayer(); // mediaplayer for key 1 
key1.setOnClickListener(new OnKeyClickListener(mediaPlayer1)); 

MediaPlayer mediaPlayer2 = new MediaPlayer(); // mediaplayer for key 2 
key2.setOnClickListener(new OnKeyClickListener(mediaPlayer2)); 

編輯1: 或者,您可以添加mediaplayer作爲視圖的標記。

key1.setTag(mediaplayer1); 

然後在onClick獲取點擊的views標籤並將其轉換爲mediaplayer。

onClick(View v) { 
    Mediaplayer mediaplayer = (MediaPlayer) v.getTag(); 
} 
+0

我不知道得到它;這意味着我只需要一個媒體播放器?你需要看更多的代碼嗎? – glassraven

+0

不,你讓每一個像你一樣的媒體播放器已經有了,並且把它傳遞給你的點擊監聽器。所以每個鍵都有自己的OnKeyClickListener實例,每個鍵都有自己的媒體播放器傳遞給它。 – stephanmantel

+0

謝謝,我會去替代,這樣可以工作 – glassraven

相關問題