将活动转换为片段

时间:2014-01-18 14:57:26

标签: android android-fragments android-activity

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

错误

1)对于Rajathmusic类型,方法setContentView(int)未定义。

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

3)对于Rajathmusic类型,方法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.");
}}

4 个答案:

答案 0 :(得分:47)

  1. Fragment有一个名为onCreateView(LayoutInflater, ViewGroup, Bundle)的方法。覆盖它,使用布局进行膨胀并返回视图。
  2. 由于create方法需要Context,因此请使用getActivity()
  3. 传递它
  4. findViewById(int)可以称为getView().findViewById(R.id.button3)
  5. 以下是示例代码:

    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 :(得分:2)

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

答案 2 :(得分:2)

片段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.

答案 3 :(得分:0)

从活动中的onCreate()方法复制代码,并将其粘贴到片段的onCreateView()方法中。

要解决错误,请在该关键字的位置传递getActivity并使用getView().findViewById()