簡體   English   中英

PreferenceFragment中的首選項未更新

[英]Preference in PreferenceFragment is not getting updated

我有一個主要的活動,該活動會加載PreferenceFragment(它是actionBar的一部分)。

在PreferenceFragment中,我從XML文件加載了我的首選項:

   @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Load the preferences from an XML resource
        addPreferencesFromResource(R.xml.preferences);

    }

問題是如果我更改了選項卡(請記住它正由ActionBar進行管理),更改了另一個片段中的首選項之一,並返回到我的preferenceFragment中,它沒有被更新。 尤其是問題是可以從不同片段甚至通過遠程調用更改SwitchPreference(true / false)(然后在共享首選項中更改了首選項。是的,我確實提交了更改)。

我搜索了不同的解決方案,但老實說,我沒有找到可行的解決方案。 我自己的想法如下:

如果可以獲取開關的Switch元素,則將解決我的問題,因此可以在onStart()或onResume()方法中將開關設置為true。 但是,獲取Switch對象是否有變化? 如果我要加載常規布局,則可以這樣訪問該開關:

    View v = inflater.inflate(R.layout.start_fragment, container, false);
    Switch status = (Switch) v.findViewById(R.id.switch1);

之后,我將能夠像這樣設置開關的位置:

status.setChecked(true);

另一個解決方案是銷毀實際視圖並再次調用addPreferencesFromResource(),但是老實說,我不知道該怎么做。

第三種解決方案可能是在我的PreferenceFragment中使用OnCheckedChangeListener,但是問題仍然是如何更改/更新開關。

我確信首選項已正確更新,因為我正在其中一項服務中運行OnSharedPreferenceChangeListener,並且為了調試此問題,我使偵聽器記錄了switchPreference的狀態。

你能以某種方式幫助我嗎?


不幸的是,我無法在明天早上之前回答自己的問題,所以我編輯了我的問題:

謝謝大家,我不想重新啟動基礎活動,而只想重新啟動片段。

幸運的是,我在此線程中找到了一個線索: 如何刷新PreferenceActivity以顯示設置的更改?

我真的可以這么簡單地訪問SwitchPreference。 我的解決方案是:

private SwitchPreference pref_phone_locked;

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Load the preferences from an XML resource
        addPreferencesFromResource(R.xml.preferences);

        status = (SwitchPreference) findPreference("status");

    }


    public void onStart(){
            super.onStart();


            SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity());
            if(sharedPref.getBoolean("status", false)){
                status.setChecked(true);
            }else{
                status.setChecked(false);
            }
        }

這樣,我可以簡單地將Preference轉換為SwitchPreference,並在每次onStart()調用之后對其進行修改。 我想這是解決我問題的最好方法。

希望這個答案將來可以節省別人的時間=)再次謝謝你們!

我不確定這是否適合您(我有非常基礎的Android知識),但是我在類似的問題中找到了該解決方案,對我來說效果很好

private void simulateRefresh(){
    Intent intent = getIntent();
    overridePendingTransition(0, 0);
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    finish();
    overridePendingTransition(0, 0);
    startActivity(intent);
}

基本上,這會破壞並重新創建活動,而中間沒有動畫。

這里找到

暫無
暫無

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

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