に基づいてアプリの設定メニューを作成しましたPreferenceFragment
。設定メニューを開かずに、アプリの他の場所から設定ダイアログにアクセスしたいと考えています。
私の設定メニューにはこれがあります:
メインアクティビティからこのメニュー項目をクリックしたときに同じダイアログを表示したい:
メインActivity
にListFragment
は、すべての UI 処理コードがある場所があります。も もありませPreferenceActivity
んPreferenceFragment
。
同じオブジェクトを呼び出してダイアログにアクセスしたいだけですPreferenceFragment
。そうしないと、設定の変更を手動で処理するカスタム コードを記述しなければならず、これは避けたいと思います。
メインにを追加PreferenceFragment
すると適切にインスタンス化されると思いましたが、うまくいかないようです。FragmentManager
Activity
「並べ替え」オプションのメニュー ハンドラー コードから:
SettingsFragment fragment = (SettingsFragment) getFragmentManager().findFragmentByTag(SettingsActivity.FRAGMENT_TAG);
// first run case
if (fragment == null) {
fragment = SettingsFragment.newInstance(getActivity());
getFragmentManager().beginTransaction().add(fragment, SettingsActivity.FRAGMENT_TAG).commit();
}
CustomListPreference listPref = (CustomListPreference) fragment.findPreference(SettingsFragment.KEY_PREF_SORTORDER);
listPref.show(); // invokes showDialog(null)
これは、が正しく初期化されなかったことを示すNullPointerException
onでクラッシュします。listPref
PreferenceFragment
この効果を達成する方法はありますか、または機能を AlertDialog として記述し、設定の変更を手動で処理する必要がありますか?