2013-09-11 5 views
1

Может ли кто-нибудь помочь мне разобраться, где я здесь не так. На кнопке нажмите медиаплеер, играя один из mfiles в случайном порядке, и я пытаюсь установить текстовое представление в зависимости от того, какой файл был воспроизведен. В настоящее время команды setText if соответствуют только воспроизведению звука в два раза. На самом деле не знаю, где я здесь ошибся.Текст, если оператор не работает

private final int SOUND_CLIPS = 3; 
private int mfile[] = new int[SOUND_CLIPS]; 
private Random rnd = new Random(); 

MediaPlayer mpButtonOne; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mfile[0] = R.raw.one; 
    mfile[1] = R.raw.two; 
    mfile[2] = R.raw.three; 

    //Button setup 
    Button bOne = (Button) findViewById(R.id.button1); 
    bOne.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      final TextView textOne = (TextView)findViewById(R.id.textView1); 
         mpButtonOne = MediaPlayer.create(MainActivity.this, mfile[rnd.nextInt(SOUND_CLIPS)]); 
      if (mpButtonOne==null){ 
        //display a Toast message here 

        return; 
      } 


      mpButtonOne.start(); 
      if (mfile[rnd.nextInt(SOUND_CLIPS)] == mfile[0]){ 
       textOne.setText("one"); 
      } 
      if (mfile[rnd.nextInt(SOUND_CLIPS)] == mfile[1]){ 
       textOne.setText("two"); 
      }    
      if (mfile[rnd.nextInt(SOUND_CLIPS)] == mfile[2]){ 
       textOne.setText("three"); 
      } 
       mpButtonOne.setOnCompletionListener(new soundListener1()); 
       { 
       } 

Так что прояснить меня проблема в том, что SetText соответствует только звук иногда, а не на каждый клик. В остальное время он отображает неправильный текст для неправильного звука.

ответ

1

Вы выбираете еще один случайный файл

mfile[rnd.nextInt(SOUND_CLIPS)] 

набор, к переменной в onClick() затем проверить по этой переменной в вашем if заявлении

public void onClick(View v) { 

    int song = mfile[rnd.nextInt(SOUND_CLIPS)]; 
    final TextView textOne = (TextView)findViewById(R.id.textView1); 
    mpButtonOne = MediaPlayer.create(MainActivity.this, song); 


    if (song == mfile[0]){ 
     textOne.setText("one"); 
    } 

Редактировать

Чтобы сделать это переменную-член, чтобы вы могли использовать ее в любом месте класса, просто объявите ее стороны метода. Обычно делайте это до onCreate(), так что все переменные-члены находятся в одном и том же месте, что делает ваш код более удобочитаемым/управляемым.

public class SomeClass extends Activity 
{ 
    int song; 

    public void onCreate() 
    { 
     // your code 
    } 

, то вы можете просто инициализировать его в вашем onClick()

public void onClick(View v) { 

    song = mfile[rnd.nextInt(SOUND_CLIPS)]; 
    final TextView textOne = (TextView)findViewById(R.id.textView1); 
    mpButtonOne = MediaPlayer.create(MainActivity.this, song); 
+0

Это помогло мне разобраться в проблеме, спасибо много. Что-то еще, что я хотел сделать, это использовать песню int в другом onClick, однако переменная должна быть локальной для этого оригинального onClick, как я могу сделать общедоступную, которую я могу использовать в любом месте, а не только в исходном onClick. – user2756111

+0

Вам нужно объявить его как переменную-член, чтобы иметь класс, а не только локальную область. Я редактировал пример. Дайте мне знать, если это не имеет смысла. – codeMagic

+0

На самом деле я не думал, что я пытаюсь это сделать, так это получить кнопку повтора, чтобы получить песню, которую только что сыграли, и onClick снова играет тот же самый. Установка его как int-песни; и его инициализация просто создает другую случайную песню для воспроизведения. Как мне поступить, как вернуть значение песни после ее воспроизведения, чтобы я мог снова воспроизвести ее с помощью другого onClick. Спасибо за вашу помощь, кстати, кстати. – user2756111

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