Help us understand the problem. What is going on with this article?

本当にAndroidのFragmentには空のコンストラクタが必要なの?

フラグメントに空のコンストラクタがなぜ必要なのかを、とっさに説明できなかったので、簡単にまとめてみた。

空のコンストラクタを作成しないとどうなるか

あなたが複数の引数をとるコンストラクタを持つFragmentを作ったとする。
そのFragmentは正常に動くだろう。
その後あなたはアプリをリリースする。

その後以下のエラーメッセージ付きのクラッシュ報告がたくさん上がってくる。
開発時はエラーなんて吐かなかったのに、古いAndroidを使い続けるユーザーが悪いんだとあなたはは思いつつエラー対応に当たることになる。

Unable to instantiate fragment 
make sure class name exists, is public, and has an empty constructor that is public

fuck you android(これは本当にそう)

正しい空のコンストラクタの作り方

とにかくFragment内部のコンストラクタをoverrideするのは止める。
常に空のコンストラクタを記述し、Fragment初期化時に引数を渡したい時のために
newInstanceメソッドを作成するのが良いだろう。

public static final MyFragment newInstance(int title, String message){
  MyFragment f = new MyFragment();
  Bundle bel = new Bundle(2);
  bdl.putInt(EXTRA_TITLE, title);
  bel.putString(EXTRA_MESSAGE, message);
  f.setArguments(bel);
  return f;
}

そしてFragment内では以下のようにargumentを使用する。

@Override
public void onCreate(Bundle savedInstanceState) {
  title.= getArguments().getInt(EXTRA_TITLE);
  message = getArguments().getString(EXTRA_MESSAGE);
}

作成したFragmentは以下のように使用する。

getSupportFragmentManager()
  .beginTransaction()
  .replace(R.id.content, MyFragment.newInstance(
  R.string.alert_title,
  Oh no, an error occurred””
  ))
  .commit();

参考

https://stackoverflow.com/questions/10450348/do-fragments-really-need-an-empty-constructor

kaba
React Native製アプリのヤミーを運営しています。Expo製なので、expoを実務で使う前にインストールしてみて下さい。https://play.google.com/store/apps/details?id=com.kabainc.yummy&hl=ja
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした