Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發 EditTextPreference 和 ListPreference的summary值動態修改

Android開發 EditTextPreference 和 ListPreference的summary值動態修改

編輯:關於Android編程

有的時候需要在編輯了EditTextPreference或者修改了ListPreferenceListPreference的時候動態的來改變他們的summary值。 下面給出我采用的一種解決方案,這種方案的有點是你只需要在xml裡面設置好summary的模板就行,而不去去java代碼裡面動態的組成summary字符串。   這樣的優點是修改summary樣式方便,同時也容易做到多語言支持。     代碼寫的緊湊,三個類都在一個文件裡面了。   SettingActivity.java [java]  package com.ynsoft.commontooling;      import android.app.Activity;   import android.os.Bundle;   import android.preference.EditTextPreference;   import android.preference.ListPreference;   import android.preference.Preference;   import android.preference.Preference.OnPreferenceChangeListener;   import android.preference.PreferenceFragment;   import android.util.Log;      public class SettingActivity extends Activity {          public static class SettingFragment extends PreferenceFragment {              public class PrefListener implements OnPreferenceChangeListener {               private String format = null;                  public PrefListener(String key) {                   super();                   Preference preference = findPreference(key);                   format = preference.getSummary().toString();                      if (EditTextPreference.class.isInstance(preference)) {                       // EditText                       EditTextPreference etp = (EditTextPreference) preference;                       onPreferenceChange(preference, etp.getText());                   } else if (ListPreference.class.isInstance(preference)) {                       // List                       ListPreference lp = (ListPreference) preference;                       onPreferenceChange(preference, lp.getValue());                   } else {                       Log.e("SettingActivity", "不支持的Preference類型");                   }                   preference.setOnPreferenceChangeListener(this);               }                  @Override               public boolean onPreferenceChange(Preference preference, Object newValue) {                   preference.setSummary(format.replace("{v}", newValue==null?"null":newValue.toString()));                   return true;               }           }              @Override           public void onCreate(Bundle savedInstanceState) {               super.onCreate(savedInstanceState);               this.addPreferencesFromResource(R.xml.testpreferences);                  // 下面做兩個鍵值的監聽                  // 文本框的對應EditTextPreference               // summary like this:               // "當前用戶為: {0}"               new PrefListener("preference_username");                  // 列表的對應ListPreference               // summary like this:               // "當前波特率為: {0}"               new PrefListener("preference_baudrate");           }       }          @Override       protected void onCreate(Bundle savedInstanceState) {           super.onCreate(savedInstanceState);           getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingFragment()).commit();       }   }     配置文件testpreferences.xml [html]   <?xml version="1.0" encoding="utf-8"?>   <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >          <!-- summary裡面{v}來表示將被填充的值 -->          <EditTextPreference           android:dialogTitle="請輸入用戶名"           android:key="preference_username"           android:summary="當前用戶為: {v}"           android:title="用戶名" />          <ListPreference           android:dialogTitle="請選擇波特率"           android:entries="@array/baudrate"           android:entryValues="@array/baudrate"           android:key="preference_baudrate"           android:summary="當前波特率為: {v}bps"           android:title="波特率" />      </PreferenceScreen>     這樣在xml的summary上只需要使用{v}來占位就行,程序會自動將{v}替換為真正的值。   需要注意的是需要在SettingFragment的onCreate裡面創建對應的鍵監聽,如下:   [java]   new PrefListener("preference_username");          
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved