程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> gui-在Preperence列表中,怎麼顯示出一個AndroidPreference的當前值?

gui-在Preperence列表中,怎麼顯示出一個AndroidPreference的當前值?

編輯:編程綜合問答
在Preperence列表中,怎麼顯示出一個AndroidPreference的當前值?

當用戶在Android應用上編輯preferences時,我想要讓他們在Preference列表可以看到preference當前設置的值
例如:如果我有一個Preference設置成“刪除舊信息”,當這個消息被閱讀後,指定在多少天後刪除消息。在PreferenceActivity中,我比較想要用戶看到這樣:
“刪除舊信息” <- 標題
“x天後刪除信息”<-列表中x就是Preference當前的值
這個可以重復使用,這個我就能夠簡單的把它應用到我所有的preferences中了,而不用管他們的類型(以便它使用最少數量的EditTextPreference,ListPreference等仍然可以工作)

最佳回答:


很不幸,這看起來並不簡單,這樣做的自動方法(你應該也注意到了,幾乎沒有本地的preferences這樣做)。那就是說,我確定這是一個相當普通的需求,所以這是我達到這個目的的方法。
關鍵是要讓你的PreferenceActivity類實現OnSharedPreferenceChangeListener方法。使用onSharedPreferenceChanged方法你可以監聽到具體的preference關鍵字,然後在相關的preference上使用setSummary來控制修改文本,像這樣:

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

if (key.equals(KEY_A_CHECKBOX_PREFERENCE)) {
    mCheckBoxPreference.setSummary(sharedPreferences.getBoolean(key, false) ? "Disable this setting" : "Enable this setting");
}
else if (key.equals(KEY_AN_EDITTEXT_PREFERENCE)) {
    mEditBoxPreference.setSummary("Current value is " + sharedPreferences.getString(key, "")); 
}
}

在應用程序共享參數上允許這個類作為一個監聽者來對preference的改變進行監聽使用registerOnSharedPreferenceChangeListener 方法 ,像這樣:

getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

你的最好的方法就是在onResume上進行登記然後再在onPause中撤銷。當你登記這個監聽者來確保你獲得了正確的初始值得時候,你可能也需要更新文件的值
下邊的例子是android示例

public class AdvancedPreferences extends PreferenceActivity implements 
OnSharedPreferenceChangeListener {
   public static final String KEY_LIST_PREFERENCE= "list_preference";
   public static final String KEY_CHECKBOX_PREFERENCE= "checkbox_preference";
   private CheckBoxPreference mCheckBoxPreference;
   private ListPreference mListPreference;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.advanced_preferences);
        mCheckBoxPreference= (CheckBoxPreference)getPreferenceScreen().findPreference(KEY_ADVANCED_CHECKBOX_PREFERENCE);
        mListPreference= (ListPreference)getPreferenceScreen().findPreference(KEY_LIST_PREFERENCE);
   }
   @Override
   protected void onResume() {
       super.onResume();
        mCheckBoxPreference.setSummary(sharedPreferences.getBoolean(key, false) ? "Disable this setting" : "Enable this setting");
        mListPreference.setSummary("Current value is " + sharedPreferences.getValue(key, ""));
                    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
   }
   @Override
   protected void onPause() {
       super.onPause();
                   getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
       }
   public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
       if (key.equals(KEY_CHECKBOX_PREFERENCE)) {
          mCheckBoxPreference.setSummary(sharedPreferences.getBoolean(key, false) ? "Disable this setting" : "Enable this setting");
       }
       else if (key.equals(KEY_LIST_PREFERENCE)) {
          mListPreference.setSummary("Current value is " + sharedPreferences.getValue(key, ""));
        }
   }
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved