这是一个简单的代码,用于在点击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.");
}}
答案 0 :(得分:47)
Fragment
有一个名为onCreateView(LayoutInflater, ViewGroup, Bundle)
的方法。覆盖它,使用布局进行膨胀并返回视图。Context
,因此请使用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
生命周期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()
。