0

Я новичок в разработке android, и я пытаюсь реализовать Activity Activity, чтобы он мог принимать предпочтения пользователя. Это моя активность в настройках, которая уже включает код для обработки изменений Edit Preference. Модуль реализован для Android 3.0 и выше, поэтому используется параметр Фрагмент.Как добавить 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> 

Может кто-нибудь помочь мне добавить предпочтение списка модуль в методе «Фрагмент настроек» вместе с прослушивателем? Я прошел через другие должности, но каким-то образом я не могу изменить его соответствующим образом.

ответ

0

Вы можете использовать getPreference для ссылки на ListPreference в java, а затем зарегистрировать на нем слушателя.

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; 
Смежные вопросы