2014-01-18 56 views
13

這是一個簡單的代碼,用於在單擊button時播放聲音,此代碼最初是在Activity中編寫的,但現在我想將其更改爲Fragments。將活動轉換爲片段

錯誤

1)的方法,setContentView(int)是未定義的類型Rajathmusic。

2)MediaPlayer類型中的方法create(Context, int)不適用於參數(Rajathmusic,int)。

3)方法findViewById(int)未定義類型Rajathmusic。

我剛剛開始與Android開發,任何幫助將不勝感激!

public class Rajathmusic extends Fragment { 

private static final String TAG = "MyActivity"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    Log.v(TAG, "Initializing sounds..."); 

    final MediaPlayer mp = MediaPlayer.create(this, R.raw.rajath); 

    Button play_button = (Button)this.findViewById(R.id.button3); 

    play_button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Log.v(TAG, "Playing sound..."); 
      mp.start(); 
     } 
    }); 
    Log.v(TAG, "Sounds initialized."); 
}} 

回答

36
  1. Fragment有一個叫做onCreateView(LayoutInflater, ViewGroup, Bundle)的方法。覆蓋它,使用佈局膨脹並返回視圖。
  2. 由於創建方法需要一個Context,使用getActivity()
  3. findViewById(int)可以稱爲getView().findViewById(R.id.button3)

下面是一個示例代碼傳遞:

public class Rajathmusic extends Fragment { 

    private static final String TAG = "MyActivity"; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.activity_main, container, false); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     Log.v(TAG, "Initializing sounds..."); 

     final MediaPlayer mp = MediaPlayer.create(getActivity(), R.raw.rajath); 

     View v = getView(); 

     Button play_button = (Button) v.findViewById(R.id.button3); 

     play_button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       Log.v(TAG, "Playing sound..."); 
       mp.start(); 
      } 
     }); 
     Log.v(TAG, "Sounds initialized."); 
    } 

} 

瞭解更多關於Fragment生命週期here知道爲什麼我把代碼放在onActivityCreated而不是onCreate

+1

非常感謝!按我想要的方式工作! – Rajath

+1

super.onCreate(savedInstanceState);之後public void onActivityCreated(Bundle savedInstanceState){ – Attaullah

1

使用此代碼覆蓋方法OnActivityCreated(...)和替代this使用getActivity(),因爲新片段不開展任何活動。

1

在片段onCreate方法通常寫原樣

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

而且使用 -

final MediaPlayer mp = MediaPlayer.create(getActivity(), R.raw.rajath); 
Button play_button = (Button) view.findViewById(R.id.button3); 

如果您想了解更多關於片段。 Check this link.