2010-04-21 3 views
0

이 코드를 가지고 :(안드로이드) 공공 공허에서 변수를 얻기

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'를 사용 할 수 있도록하려면 :웠다 내용에 따라 변수가 될하지만) 지금

문제이기 때문에 난 괜찮아 잠시 멈추는 버튼) 어떻게하면됩니까?

제임스

답변

0

변수 mp2을 상위 클래스의 인스턴스로 이동하십시오. 이것은 원할 때마다 상호 작용할 수있는 실행중인 참조를 유지합니다. MediaPlayer.create(...)이 두 번 이상 호출되어 저장되는 경우 final 한정자를 제거해야합니다.


편집 :

나는이의 라인을 따라 뭔가를 언급했다 : (이 문제를 해결 한 후) 나는 미래에 말했다

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

내가 안에 필요해. (이유는 크리스의 대답에 대한 논평을 넣어) –

+0

내 편집을 참조하십시오. 메인 클래스 인스턴스에'MediaPlayer' 객체를 저장하는 것을 제외하고는 코드와 정확히 같습니다. –

+0

그러면 '(일부) 클래스'에 (일시 중지) 버튼을 넣습니다.하지만 개인적인 무효가 아닙니다. 그게 효과가 있을까요? –

0

난 당신이 MediaPlayer.create(Textbox.this, R.raw.hero)를 호출 할 때 어떻게되는지 모르겠지만,이 즉각적인 효과가없는 가정, 당신은 단지 만들 수 있습니다 작정

설명해주십시오/쇼 ...

감사합니다 리스너 외부의 객체


편집 1 :이 경우 어때요?

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; 
} 
+0

그래, 나도 알아,하지만 같은 난에 갈거야 'R.raw. **** 스피너의 변수 값 *****'대신 mp3 트랙을 찾으십시오. - 그래서 밖으로 나갈 수 없지, 그렇지? :) –

+0

불행히도 R.raw가 어디에서 왔는지 모르겠다. 안드로이드 경험이 없지만 로컬 변수처럼 들리지 않으므로 원하는 곳이라면 어디든지 둘 수있다. – Chris

+0

절대 신경 쓰지 마 :) 어쨌든 고마워. –

관련 문제