簡體   English   中英

Android:如何從PreferenceActivity / PreferenceFragment外部打開ListPreference對話框?

[英]Android: how to open a ListPreference dialog from outside PreferenceActivity/PreferenceFragment?

我已根據PreferenceFragment為我的應用程序創建了一個設置菜單,並希望從應用程序的其他位置訪問設置對話框,而無需打開設置菜單。

我的設置菜單包含:

設置菜單

當我從主要活動中單擊此菜單項時,我想顯示相同的對話框:

主要活動

Activity有一個ListFragment ,它是所有UI處理代碼的所在。 也不是PreferenceActivityPreferenceFragment

我只是想調用相同的PreferenceFragment對象來進入對話框,否則我必須編寫自定義代碼來手動處理首選項更改,我想避免。

我認為將PreferenceFragment添加到主ActivityFragmentManager會正確實例化它,但它似乎不起作用。

從我的菜單處理程序代碼“排序”選項:

    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)

這與listPref上的NullPointerException崩潰,這表明PreferenceFragment未正確初始化。

有沒有辦法實現這種效果,還是我必須將功能寫為AlertDialog並手動處理首選項更改?

我認為你必須自己在Preference類之外編寫這個功能。

Preference,PreferenceActivity和PreferenceFragment都旨在協同工作,為Android應用程序提供一致的UIX。 因此,建議按原樣使用它們。

您不能直接在常規活動中復制這兩個類之外的PreferenceActivity或PreferenceFragment的UI,因為UI是從Preference對象構建的,而不是像常規活動這樣的View對象。 因此,如果您想要特定的UI,則必須嘗試使用​​自定義視圖復制它。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM