2014-01-18 2 views
13

Это простой код для воспроизведения звука при щелчке по button, этот код был изначально написан на Activity, но теперь я хочу изменить его на Fragments.преобразование активности в фрагмент

ошибки

1) Метод setContentView(int) не определено для типа Rajathmusic.

2) Метод create(Context, int) в виде MediaPlayer не применим для аргументов (Rajathmusic, int).

3) Метод findViewById(int) не определен для типа 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."); 
}} 

ответ

36
  1. Fragment имеет метод под названием onCreateView(LayoutInflater, ViewGroup, Bundle). Переверните его, надуйте с помощью макета и верните представление.
  2. Поскольку метод создания ожидает 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 жизненным циклом here знать почему я поставил код в onActivityCreated, а не onCreate

+1

благодарит! работал, как я хотел! – Rajath

+1

super.onCreate (savedInstanceState); после этого public void onActivityCreated (Bundle savedInstanceState) { – Attaullah

1

Используйте этот код в переопределен метод OnActivityCreated(...) и вместо this использование getActivity(), поскольку новый фрагмент не активность больше.

1

В фрагменте 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.

Смежные вопросы