将活动转换为片段

24

这是一个简单的代码,用于在单击“按钮”时播放声音,此代码最初是在 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个回答

52
  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中。


3
super.onCreate(savedInstanceState); 这行代码执行后,接下来会执行 public void onActivityCreated(Bundle savedInstanceState) { 的方法。 - Attaullah

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

如果您想了解更多关于碎片的知识,请查看此链接。

2

在重写的方法OnActivityCreated(...)中使用此代码,而不是使用this,而是使用getActivity(),因为新的Fragment不再是Activity。


0

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

为了修复错误,使用 getActivity 替换此关键字,并使用 getView().findViewById()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接