Преобразование активности в фрагмент
Это простой код для воспроизведения звука при нажатии button
, этот код изначально был записан в Activity, но теперь я хочу изменить его на Fragments.
Ошибки
1) Метод setContentView(int)
- undefined для типа Rajathmusic.
2) Метод create(Context, int)
в типе MediaPlayer неприменим для аргументов (Rajathmusic, int).
3) Метод findViewById(int)
- undefined для типа 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.");
}}
Ответы
Ответ 1
-
Fragment
имеет метод, называемый onCreateView(LayoutInflater, ViewGroup, Bundle)
. Переопределите его, надуйте с помощью макета и верните представление.
- Так как метод create ожидает a
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
lifecycle здесь, чтобы узнать, почему я поместил код в onActivityCreated
, а не onCreate
Ответ 2
Используйте этот код в методе переопределения OnActivityCreated(...)
и вместо this
используйте getActivity()
, так как новый фрагмент больше не является активностью.
Ответ 3
В методе фрагмента 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);
Если вы хотите больше узнать о фрагментах. Проверьте эту ссылку.