PreferenceFragmentの使い方
公式開発ガイドのとおりにするとエラーになるんだけどな・・・
public class SettingsActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Display the fragment as the main content. getFragmentManager().beginTransaction() .replace(android.R.id.content, new SettingsFragment()) .commit(); } }
画面を回転させた時にonCreateが呼ばれると、super.onCreate()が終わった時にすでにPreferenceFragmentが復元されている。
この時は // Display the fragment as the main content. はいらないんじゃないか?
ただPreferenceFragmentを表示する分には問題ないみたいだけど、DialogFragmentを使うとエラーが起きる。
・PreferenceFragmentを表示
・DialogFragmentを表示
・画面を回転
・DialogFragmentが呼出すPreferenceFragmentのonActivityResult()で再度DialogFragmentを表示
DialogFragment#show(FragmentManager, int)のためにPreferenceFragment#getFragmentManager()を使用するのだが、これがnullを返してくる。
getActivity()もnullを返してくるし、PreferenceFragmentの状態がおかしくなっているらしい。
if (getFragmentManager().findFragmentById(android.R.id.content) != null) { return; } // Display the fragment as the main content. getFragmentManager().beginTransaction() .replace(android.R.id.content, new SettingsFragment()) .commit();
とすればいいらしい。
それともDialogFragmentの使い方がおかしいのかな?
ちゃんとgetTargetFragment(), setTargetFragment()を使ってるんだけど・・・