使用片段动态更新摘要首选项?

时间:2014-12-16 20:39:50

标签: android sharedpreferences preferences

我在更新PreferncesFragment的汇总值方面遇到了问题。我试图遵循帖子的建议:Updating sharedPreferences Summary via listener但它不起作用!摘要不会更新......

我不明白出了什么问题?感谢您的帮助!

我的pref文件:

    <CheckBoxPreference 
        android:key="is_title"
        android:summary="@string/conf_istitle_sum"
        android:title="@string/conf_istitle_title" 
        android:defaultValue="true"
    />
    <EditTextPreference
        android:key="sms_title"
        android:title="@string/conf_sms_title" 
        android:summary="@string/msgtitre"
        android:dialogTitle="@string/conf_diagsms_title"
        android:dialogMessage="@string/conf_diagsms_sum"    
        android:defaultValue="@string/msgtitre"
        />

我的偏好课程:

  

公共类SetPreferenceActivity扩展PreferenceActivity实现OnSharedPreferenceChangeListener    {          protected MyPreferenceFragment settingsFragment;

    @Override
    protected void onCreate(final Bundle savedInstanceState)
    {   settingsFragment = new MyPreferenceFragment();
        super.onCreate(savedInstanceState);
        getFragmentManager().beginTransaction().replace(android.R.id.content,
                settingsFragment).commit();
    }
    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
            String key) {
        if (key.equals("sms_title")) {
            String newValue = sharedPreferences.getString(key, "");
            settingsFragment.findPreference(key).setSummary(newValue);
        }
    }
    public static class MyPreferenceFragment extends PreferenceFragment
    {
        @Override
        public void onCreate(final Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);


           }

          }
}

&#34; old&#34;工作的是什么?已弃用解决方案OldPreferences

1 个答案:

答案 0 :(得分:1)

请检查是否正在调用onSharedPreferenceChanged。您需要使用您的首选项注册处理程序。第一, 在onCreate

中获取您的偏好参考
public class SettingsActivity 
    extends AppCompatActivity 
    implements SharedPreferences.OnSharedPreferenceChangeListener {

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

        preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        // ...
}

在活动的生命周期中(请注意,我使用普通AppCompatActivity而不是PreferenceActiviy)注册handeler。

@Override
protected void onPause() {
    super.onPause();
    preferences.unregisterOnSharedPreferenceChangeListener(this);
}

@Override
protected void onResume() {
    super.onResume();
    preferences.registerOnSharedPreferenceChangeListener(this);
}

现在,应该调用处理程序:

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    Log.d(DEBUG_TAG, key);
    // fragment.findPreference(key) //... TBD
}