2016-11-16 2 views
-1

это программа для музыкального инструмента. У меня есть 10 клавиш (кнопок) для каждого звука и другой медиаплеер, связанный с ним. Я создал метод для каждого ключа, но, как вы можете видеть, код всегда один и тот же; единственное, что меняется, - это медиа-плеер ... Это прекрасно работает, но я спрашиваю, есть ли лучший способ сделать это, что-то более динамичное?Как установить динамические представления onclick в Android?

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: В качестве альтернативы вы можете добавить медиаплеер в качестве тега для представления.

key1.setTag(mediaplayer1); 

А затем в onClick получить тег с щелчками и применить его к медиаплееру.

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

Я не знаю, если это получится; это означает, что мне нужен только один медиаплеер? Вам нужно увидеть больше кода? – glassraven

+0

Нет, вы делаете каждый медиаплеер, как вы уже, и передаете это своим слушателям. Таким образом, каждый ключ имеет свой собственный экземпляр OnKeyClickListener, и каждый из них передал ему собственный медиаплеер. – stephanmantel

+0

спасибо, я поеду на альтернативу, это будет работать – glassraven

Смежные вопросы