Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将活动转换为片段_Android_Android Fragments_Android Activity - Fatal编程技术网

Android 将活动转换为片段

Android 将活动转换为片段,android,android-fragments,android-activity,Android,Android Fragments,Android Activity,这是一个简单的代码,可以在单击按钮时播放声音,该代码最初是在活动中编写的,但现在我想将其更改为片段 错误 1) Rajathmusic类型的方法setContentView(int)未定义 2) MediaPlayer类型中的方法create(Context,int)不适用于参数(Rajathmusic,int) 3) Rajathmusic类型的方法findViewById(int)未定义 我刚刚开始android开发,任何帮助都将不胜感激 public class Rajathmusic e

这是一个简单的代码,可以在单击
按钮时播放声音,该代码最初是在活动中编写的,但现在我想将其更改为片段

错误

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.");
}}

在重写的activitycreated(…)方法
OnActivityCreated(…)
中使用此代码,并使用
getActivity()
,而不是
this,因为新片段不再是activity

  • Fragment
    有一个名为
    onCreateView(LayoutInflater、ViewGroup、Bundle)的方法
    。覆盖它,使用布局充气并返回视图
  • 因为create方法需要一个
    上下文
    ,所以使用
    getActivity()
  • 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

    中的Fragment 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);
    

    如果您想了解更多有关碎片的信息

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

    要修复错误,请传递
    getActivity
    以代替此关键字,并使用
    getView().findViewById()

    super.onCreate(savedInstanceState);在此之后,在ActivityCreated(Bundle savedInstanceState)上创建了一个公共void{