Получение переменной из Public Void (Android) - PullRequest
1 голос
/ 21 апреля 2010

У меня есть этот код:

    hubSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
     public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
      final MediaPlayer mp2 = MediaPlayer.create(Textbox.this, R.raw.hero);
      mp2.start();
        }
        public void onNothingSelected(AdapterView<?> parentView) {
        }
    });

(Код в основном запускается, когда новый элемент выбирается из прядильщика, а затем воспроизводит песню, - которая позже будет переменной в зависимости от того, что было выбрано, но сейчас все нормально)

Проблема:

И я хочу иметь возможность использовать 'mp2' из этой публичной пустоты (я хочу кнопку, которая его приостанавливает) Как я могу это сделать?

Пожалуйста, объясните / покажите ...

Большое спасибо

Джеймс

Ответы [ 2 ]

0 голосов
/ 21 апреля 2010

Переместите переменную mp2 в экземпляр родительского класса. Это будет постоянно ссылаться на него, с которым вы можете взаимодействовать, когда пожелаете. Вам нужно будет удалить квалификатор final, хотя, если MediaPlayer.create(...) будет вызван несколько раз и сохранен.


редактирование:

Я имел в виду что-то вроде этого:

class SomeClass {
    private MediaPlayer mp2 = null;

    private void whateverFunctionYouAreIn() {
        hubSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
                SomeClass.this.mp2 = MediaPlayer.create(Textbox.this, R.raw.hero);
                SomeClass.this.mp2.start();
            }
            public void onNothingSelected(AdapterView<?> parentView) {}
        });

        //TODO: put this in an onClickListener:
        if (this.mp2 != null) {
            this.mp2.pause();
        }
    }
}
0 голосов
/ 21 апреля 2010

Я не уверен, что происходит, когда вы вызываете MediaPlayer.create(Textbox.this, R.raw.hero), но, предполагая, что он не имеет немедленных эффектов, вы можете просто создать объект вне слушателя.


Edit1: OK, затемкак насчет этого?

MediaPlayer currentPlayer;

methodA()
{
   hubSpinner.setOnItemSelectedListener(new OnItemSelectedListener()
   {
       public void onItemSelected(AdapterView<?> parentView,
             View selectedItemView, int position, long id)
       {
          MediaPlayer mp2 = MediaPlayer.create(Textbox.this, R.raw.hero);
          mp2.start();
          setPlayer(mp2);
       }
       public void onNothingSelected(AdapterView<?> parentView) {
    }
});


setMediaPlayer(MediaPlayer player)
{
   currentPlayer = player;
}
...