将活动转换为片段

这是一个简单的代码,可以在单击button播放声音,此代码最初是在Activity中编写的,但现在我想将其更改为Fragments。

错误

1)方法setContentView(int)未定义为Rajathmusictypes。

2)MediaPlayertypes中的方法create(Context, int)不适用于参数(Rajathmusic,int)。

3)对于Rajathmusictypes,方法findViewById(int)是未定义的。

我刚刚开始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."); }} 

  1. Fragment有一个名为onCreateView(LayoutInflater, ViewGroup, Bundle) 。 覆盖它,使用布局进行膨胀并返回视图。
  2. 由于create方法需要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生命周期的信息 ,了解为什么我将代码放在onActivityCreated而不是onCreate

片段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); 

如果您想了解更多有关片段的信息。 检查此链接。

在覆盖方法OnActivityCreated(...)使用此代码,而不是使用getActivity() ,因为新片段不再是活动。