Подтвердить что ты не робот

Преобразование активности в фрагмент

Это простой код для воспроизведения звука при нажатии 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.");
}}
4b9b3361

Ответ 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);

Если вы хотите больше узнать о фрагментах. Проверьте эту ссылку.