6

に基づいてアプリの設定メニューを作成しましたPreferenceFragment。設定メニューを開かずに、アプリの他の場所から設定ダイアログにアクセスしたいと考えています。

私の設定メニューにはこれがあります:

設定メニュー

メインアクティビティからこのメニュー項目をクリックしたときに同じダイアログを表示したい:

主な活動

メインActivityListFragmentは、すべての UI 処理コードがある場所があります。も もありませPreferenceActivityPreferenceFragment

同じオブジェクトを呼び出してダイアログにアクセスしたいだけですPreferenceFragment。そうしないと、設定の変更を手動で処理するカスタム コードを記述しなければならず、これは避けたいと思います。

メインにを追加PreferenceFragmentすると適切にインスタンス化されると思いましたが、うまくいかないようです。FragmentManagerActivity

「並べ替え」オプションのメニュー ハンドラー コードから:

    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)

これは、が正しく初期化されなかったことを示すNullPointerExceptiononでクラッシュします。listPrefPreferenceFragment

この効果を達成する方法はありますか、または機能を AlertDialog として記述し、設定の変更を手動で処理する必要がありますか?

4

1 に答える 1

1

この機能は、Preference クラスの外で自分で作成する必要があると思います。

Preference、PreferenceActivity、および PreferenceFragment はすべて連携して動作し、Android アプリに一貫した UIX を提供するように設計されています。そのため、意図したとおりに組み合わせて使用​​することをお勧めします。

UI は通常のアクティビティのような View オブジェクトではなく、Preference オブジェクトから構築されるため、通常のアクティビティのこれら 2 つのクラスの外部で PreferenceActivity または PreferenceFragment の UI を直接複製することはできません。したがって、その特定の UI が必要な場合は、カスタム ビューを使用して複製する必要があります。

https://discussions.udacity.com/t/way-to-do-listpreference-outside-of-settings-menu/45473

于 2016-01-28T04:47:08.150 に答える