如何在Android中以动态方式设置onclick视图?

时间:2016-11-16 13:56:49

标签: android onclick

这是一个乐器的程序。我有10个键(按钮)用于每个声音,以及与之关联的不同媒体播放器。我已经为每个密钥创建了一个方法,但正如您所看到的,代码始终是相同的;唯一改变的是媒体播放器...这很好用,但是我问是否有更好的方法可以做到这一点,更有活力?

 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 个答案:

答案 0 :(得分: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添加为View的标记。

key1.setTag(mediaplayer1);

然后在onClick中获取点击的视图标记并将其转换为媒体播放器。

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