2014-02-19 3 views
0

조각에는 소리를 재생하는 버튼이 있습니다.MediaPlayer 중지 코드 - 넣을 위치는 어디입니까?

화면 하단에 붙어있는 LinearLayout에 ScrollView와 버튼이 있습니다.

버튼을 누르는 mediaplayer가 중지되도록 코드를 입력 할 위치가 막혔습니다.

이것은 내 SoundsFragment.java 파일로 코드를 호스팅하며 내 버튼은 button_stop입니다. 보시다시피 이미 청취자를 불렀습니다. 어디에서 미디어 플레이어 정지 코드를 배치해야할지 모르겠습니다.

이 코드를 편집하거나 훌륭한 예제를 제공하면 자바 레이아웃을 더 잘 이해할 수 있습니다.

package /example/; 

import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.app.Activity; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.view.Menu; 
import android.view.View.OnClickListener; 
import android.widget.Button; 


public class SoundsFragment extends Fragment implements OnClickListener { 

    private static MediaPlayer mp = null; 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.fragment_sounds, container, false); 
     Button button1=(Button)rootView.findViewById(R.id.button_1); 
     Button button2=(Button)rootView.findViewById(R.id.button_2); 
     Button button_stop=(Button)rootView.findViewById(R.id.button_stop); 
     button1.setOnClickListener(this); 
     button2.setOnClickListener(this); 
     button_stop.setOnClickListener(this); 

     return rootView; 
    } 

    public void onClick(View v) { 
    int resId; 
    switch (v.getId()) { 
    case R.id.button_1: 
     resId = R.raw.a; 
     break; 
    case R.id.button_2: 
     resId = R.raw.b; 
     break; 
    default: 
     resId = R.raw.a; 
     break; 
    } 
    // Release any resources from previous MediaPlayer 
    if (mp != null) { 
     mp.release(); 
    } 
    // Create a new MediaPlayer to play this sound 
    mp = MediaPlayer.create(getActivity(), resId); 
    mp.setLooping(true); 
    mp.start(); 
    } 

    @Override 
    public void onDestroy() { 
     if(null!=mp){ 
    mp.release(); 
     } 
     super.onDestroy(); 
    } 
} 

답변

0

당신이 그것을 선언 후 그냥 button_stop에 대해 다른 OnClickListener를을 만들어야 할 수도 있습니다 : 그것은 여전히 ​​기본의 onclick() 함수를 호출하는 경우

button_stop.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       mp.stop(); 
      } 
     }); 

나는 확실하지 않다. 그렇다면 button_stop 이외의 버튼을 누를 때마다 호출 할 별도의 함수를 만들 수 있습니다.

public void onClick(View v) { 
int resId; 
switch (v.getId()) { 
case R.id.button_1: 
    startMediaPlayer(R.raw.a); 
    break; 
case R.id.button_2: 
    startMediaPlayer(R.raw.b); 
    break; 
case R.id.button_stop: 
    mp.stop(); 
    break; 
default: 
    startMediaPlayer(R.raw.a); 
    break; 
} 

} 

public void startMediaPlayer(int resId){ 
    // Release any resources from previous MediaPlayer 
if (mp != null) { 
    mp.release(); 
} 
// Create a new MediaPlayer to play this sound 
mp = MediaPlayer.create(getActivity(), resId); 
mp.setLooping(true); 
mp.start(); 
} 
+0

감사합니다. Tyler, 다른 onClickListener가 정확히 어떻게 작동하는지 나타납니다! 원래 다른 버튼과 동일한 템플릿을 사용하여 별도의 함수를 만드는 것은 효과가 없습니다. – rossd

관련 문제