2013-06-12 4 views
0

새로운 조각 (스 와이프)에 도착하면 사운드 파일을 자동으로 재생하고 싶습니다. 지금은 소리가 나지 않습니다. 어떤 도움MediaPlayer를 조각에 배치 할 위치는 어디입니까?

public void OnAttach(Activity Fragment1){ 

public void OnAttach(Fragment Fragment1){ 

감사 사이의 근본적인 차이는 아마도 있습니다. 코드 :

package com.example.test21; 

import java.util.Locale; 

import android.app.ActionBar; 
import android.app.FragmentTransaction; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.View; 
import android.view.ViewGroup; 

public class MainActivity extends FragmentActivity implements 

ActionBar.TabListener { 

    SectionsPagerAdapter mSectionsPagerAdapter; 

    ViewPager mViewPager; 

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

     final ActionBar actionBar = getActionBar(); 
     actionBar.hide(); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     mSectionsPagerAdapter = new SectionsPagerAdapter(
       getSupportFragmentManager()); 

     mViewPager = (ViewPager) findViewById(R.id.pager); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 
     mViewPager 
       .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
        @Override 
        public void onPageSelected(int position) { 
         actionBar.setSelectedNavigationItem(position); 
        } 
       }); 

     for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) { 
      actionBar.addTab(actionBar.newTab() 
        .setText(mSectionsPagerAdapter.getPageTitle(i)) 
        .setTabListener(this)); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public void onTabSelected(ActionBar.Tab tab, 
      FragmentTransaction fragmentTransaction) { 
     mViewPager.setCurrentItem(tab.getPosition()); 
    } 

    @Override 
    public void onTabUnselected(ActionBar.Tab tab, 
      FragmentTransaction fragmentTransaction) { 
    } 

    @Override 
    public void onTabReselected(ActionBar.Tab tab, 
      FragmentTransaction fragmentTransaction) { 
    } 

    public class SectionsPagerAdapter extends FragmentPagerAdapter { 

     public SectionsPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      switch (position) { 
       case 0: 
      return new Fragment0(); 
       case 1: 
      return new Fragment1(); 
       case 2: 
      return new Fragment2(); 
       default: 
      return null; 
     }} 

     @Override 
     public int getCount() { 
      return 3; 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      Locale l = Locale.getDefault(); 
      switch (position) { 
      case 0: 
       return getString(R.string.title_section1).toUpperCase(l); 
      case 1: 
       return getString(R.string.title_section2).toUpperCase(l); 
      case 2: 
       return getString(R.string.title_section3).toUpperCase(l); 
      } 
      return null; 
     } 
    } 

    public static class Fragment0 extends Fragment { 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.fragment_0, null); 
      return view; 
     } 
} 

public static class Fragment1 extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_1, null); 
     return view; 
    } 
    public void OnAttach(Activity Fragment1){ 
     super.onAttach(Fragment1); 
     MediaPlayer mp = MediaPlayer.create(Fragment1.getApplication(), R.raw.s1); 
     mp.start(); 
    } 
} 
     //This fragment is supposed to start the MediaPlayer, but is doesn't 
    public static class Fragment2 extends Fragment { 
     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.fragment_2, null); 
      return view; 
     } 
    } 

} 

답변

1

MediaPlayer는 인스턴스화 할 컨텍스트가 필요합니다. 당신은 단편을 전달하고 있습니다. 당신은 당신이 새로운 조각을 시작할 때 사운드를 재생하려면() onCreateView 당신은 방법에 넣어 onAttach

http://developer.android.com/reference/android/app/Fragment.html#onAttach(android.app.Activity)

http://developer.android.com/guide/components/fragments.html#EventCallbacks

+0

고마워요! 나는 코드를 편집했는데 (위 참조) 더 이상 오류 메시지가 표시되지 않지만 소리가 들리지 않습니다. 내 참조가 좋지 않다는 것이 두렵습니다. – user2365708

0

에 그것을 만들 수 있습니다.

+0

시도했지만 동일한 오류가 발생했습니다. 마치 MediaPlayer.create 근처에있는 것처럼 public void PlayClick 또는 public View onCreateView가 MediaPlayer를 – user2365708

+0

에 연결하는 데 좋은 자리 표시자가되지 않는 방법 : MediaPlayer mp = MediaPlayer.create (getBaseContext(), R.raw.s1); // 그것이 작동하기를 바랍니다. –

+0

onActivityCreated (Bundle savedInstanceState) 나를 위해 일했습니다. – cjayem13

관련 문제