2010-12-03 51 views
5

我有一個ListPreference,它有一個默認值,它的效果很好。我也有一個偏好,重置所有共享偏好,這很好。問題是,如果你回到ListPreference,它仍然顯示舊值。如果您完全退出首選項並重新進入,它會正確顯示。你如何強制listPreference重置它的值?

所以問題是我如何強制ListPreference使用正確的值?其他所有偏好似乎都很好。

我確實找到了解決辦法,但我不滿意,因爲它對我來說似乎很髒。當用戶點擊重置時,在重置值之後,我將該值自己設置爲它已經設置的值。

((ListPreference) findPreference(myListKey)).setValue(String.valueOf(DEFAULT_VALUE)); 

在此先感謝。

回答

0

我想你應該重寫ListPreference中的onSetInitialValue方法。 是這樣的。

公共類CustomListPreference擴展ListPreference {

保護無效onSetInitialValue(布爾restoreValue,對象默認值){

//當alreay init或不是你的選項值 如果(restoreValue){

}其他{// 將其設置爲defautlValue

}

}

}

1

我知道它的晚,但也許別人絆倒在此可能會發現它很有用。

Preference reset = (Preference) findPreference("reset"); 
reset.setOnPreferenceClickListener(new OnPreferenceClickListener() { 

    public boolean onPreferenceClick(Preference preference) { 
    // TODO Auto-generated method stub 
    preference.getEditor().clear().commit(); 
     Toast.makeText(getBaseContext(), 
       "Restored to default settings", Toast.LENGTH_SHORT) 
       .show(); 
     return false; 
     } 
    }); 
+2

@ user1780619不爲我在所有的工作 - 它不清除列表選擇 – likejiujitsu 2014-05-01 21:03:25

0
ListPreference pref = (ListPreference) findPreference ("yeeha"); 

pref.setValue(null); 
0

我有類似的問題,設置在ListPreference我的類別列表。問題在於,您無法通過setEntries方法更改對話框中的可見選項(設置點擊偵聽器中的條目爲時已晚)。

對我來說,解決方案是添加DrawerListener,它告訴我的PreferenceFragment它應該無效。

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

final MainOptionsFragment fragment = (MainOptionsFragment) getFragmentManager(). 
      findFragmentById(R.id.fragment_drawer); 

mDrawerOptions = new DrawerLayout.SimpleDrawerListener() { 
    @Override 
    public void onDrawerOpened(View drawerView) { 
     super.onDrawerOpened(drawerView); 
     fragment.onOpened(); 
    } 
}; 

mDrawerLayout.addDrawerListener(mDrawerOptions); 

另一種解決方案是覆蓋onPrepareDialogBu​​ilder方法,製得該對話框之前,其將設置條目。

class CustomListPreference extends ListPreference { 
    @Override 
    protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { 
     // TODO setEntries 
     super.onPrepareDialogBuilder(builder); 
    } 
} 
1

Azizi Musa是東西,但null會拋出異常。

然而,這工作:

ListPreference yeeha = (ListPreference) findPreference ("yeeha"); 

yeeha.setValue("");