将活动转换为片段

Raj*_*ath 18 android android-fragments android-activity

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

错误

1)setContentView(int)对于Rajathmusic类型,该方法是未定义的.

2)create(Context, int)MediaPlayer类型中的方法不适用于参数(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.");
}}
Run Code Online (Sandbox Code Playgroud)

Gan*_*kar 47

  1. Fragment有一个叫做的方法onCreateView(LayoutInflater, ViewGroup, Bundle).覆盖它,使用布局进行膨胀并返回视图.
  2. 由于create方法需要a 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.");
    }

}
Run Code Online (Sandbox Code Playgroud)

阅读更多关于Fragment生命周期的信息,了解我为什么要使用代码onActivityCreated而不是代码onCreate

  • super.onCreate(savedInstanceState); 在此公开void onActivityCreated(Bundle savedInstanceState)之后{ (2认同)