私は奇妙な問題を抱えています。class FragmentPagerAdapater
フラグメントを構築してアクティビティのタブに配置する内部を実装したホスト FragmentActivity を持つアプリでフラグメントを使用しています。
アプリでは、オブジェクトをアクティビティからフラグメントに渡す必要があります。これを行う適切な方法がよくわからないので、即興でフラグメントに静的フラグメントnewInstance(Object obj)
を使用しました。このメソッドは、デフォルトのフラグメントのコンストラクターを呼び出し、インスタンス変数を設定してフラグメント内のオブジェクトを保持するだけです。
Fragment のcreateView()
メソッドでは、インスタンスの Object 情報を使用してレイアウトを埋めます。これはアプリの起動時には問題なく動作しますが、画面の向きを縦から横 (またはその逆) に変更するとアプリがクラッシュします。ログは、 のインスタンス オブジェクトで NullPointerException を示していますcreateView()
。ライフサイクルで何かを逃したような気がしますが、答えが見つかりません。私のフラグメントが何があってもインスタンス変数を保存するようにする特別なことはありますか?
問題の内容を理解するのに役立つコード サンプルを次に示します。
public class MyFragment extends Fragment {
private Object obj;
public static MyFragment newInstance(Object obj) {
MyFragment fragment = new MyFragment();
fragment.setObject(obj);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.layout_fragment, container, false);
MyType res = ((Type) (obj)).getSomething(); // This line causes the crash because obj is null when I switch to another orientation
// I Do something with res to fill rootView
return rootView;
}
private void setObject(Object obj) {
this.obj = obj;
}
}
// In the Activity I simply create the Fragment using
MyFragment fragment = MyFragment.newInstance(myObjectToPass);
ご協力いただきありがとうございます !