2016-11-16 3 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)); 

EDIT 1: また、Mediaplayerをビューのタグとして追加することもできます。

key1.setTag(mediaplayer1); 

クリックした後、クリックしたビュータグを取得してメディアプレーヤにキャストします。

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

私には分かりません。これは私がちょうど1つのメディアプレーヤーを必要とすることを意味する?より多くのコードを参照する必要がありますか? – glassraven

+0

いいえ、既に持っているようなメディアプレイヤーはすべて作成し、それをクリックリスナーに渡します。したがって、すべてのキーにはOnKeyClickListenerの独自のインスタンスがあり、それぞれ独自のメディアプレーヤーが渡されます。 – stephanmantel

+0

ありがとう、私は代わりに行くだろう、それはうまくいく – glassraven

関連する問題