1. ホーム
  2. android

[解決済み] フラグメントに変換する活動

2022-02-15 11:27:10

質問事項

をクリックすると音が鳴るようにする簡単なコードです。 button このコードは、最初はActivityで書かれていましたが、今はFragmentsに変更したいと思っています。

エラー

1) メソッド setContentView(int) は、Rajathmusic 型では未定義です。

2) メソッド create(Context, int) は、引数(Rajathmusic, int)に対して適用されません。

3)メソッド findViewById(int) は、Rajathmusic 型では未定義です。

アンドロイドの開発を始めたばかりなので、何かお手伝いいただけると助かります。

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) . これをオーバーライドし、レイアウトを使用して膨張させ、ビューを返します。
  2. createメソッドでは 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 ライフサイクル こちら にコードを置いた理由を知りたい方は、こちらをご覧ください。 onActivityCreated でなく onCreate