0

我是android開發的新手,我正在嘗試實現一個設置活動,以便它可以接受用戶的偏好。這是我的設置活動,其中已包含處理編輯偏好設置更改的代碼。該模塊針對Android 3.0及更高版本實施,因此使用了Settings Fragment。如何在此活動中添加ListPreference?

public class SettingsActivity extends PreferenceActivity { 

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

    getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit(); 
} 

public static class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

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

    @Override 
    public void onResume(){ 
     super.onResume(); 
     getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); 
    } 

    @Override 
    public void onPause(){ 
     super.onPause(); 
     getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); 
    } 

    @Override 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key){ 
     if(key.equals("location")){ 
      Preference loc_preference=findPreference("location"); 
      loc_preference.setSummary(sharedPreferences.getString(key,"")); 
     } 
    } 
} 

}

這是pref_gen.xml文件

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 

<EditTextPreference 
    android:key="@string/pref_loc_key" 
    android:dialogMessage="@string/location_dialog_message" 
    android:dialogTitle="@string/location_dialog" 
    android:title="@string/pref_loc_label" 
    android:defaultValue="@string/pref_default_loc" 
    android:selectAllOnFocus="true" 
    android:singleLine="true" /> 

<ListPreference 
    android:key="@string/pref_unit_key" 
    android:dialogTitle="@string/unit_dialog_message" 
    android:title="@string/pref_unit_label" 
    android:defaultValue="@string/pref_default_unit" 
    android:entries="@array/pref_unit_options" 
    android:entryValues="@array/pref_unit_values" /> 

這是arrays.xml文件

<string-array name="pref_unit_options"> 
    <item>Metric</item> 
    <item>Imperial</item> 
</string-array> 
<string-array name="pref_unit_values"> 
    <item>1</item> 
    <item>0</item> 
</string-array> 

誰能幫我補充列表首選項Settings Fragment方法中的模塊以及一個監聽器?我已經通過其他職位,但不知怎的,我不能相應地修改它。

回答

0

您可以使用getPreference來引用java中的ListPreference,然後在其上註冊監聽器。

ListPreference unit_preference = mContext.getPreference(<Key>); 

unit_preference .setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 
    public boolean onPreferenceChanged(Preference preference, Object newValue) { 
      //Do something with newValue here 
    } 
}); 

注意:mContext是Context類型的類變量。您必須在致電beginTransaction之前將其設置爲:

mContext = this; 
相關問題