【问题标题】:Displaying EditTextPreference current value in summary在摘要中显示 EditTextPreference 当前值
【发布时间】:2017-07-20 16:37:09
【问题描述】:

我希望能够在摘要字段中显示 EditTextPreference 的值。具体来说,我想在 PreferenceFragmentCompat 中执行此操作。

import android.support.v7.preference.PreferenceFragmentCompat;

public class SettingsFragment extends PreferenceFragmentCompat {

    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        addPreferencesFromResource(R.xml.preferences);
    }
}

首选项文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <EditTextPreference
        android:defaultValue="DEVICE01"
        android:key="device_id"
        android:title="Device ID" />
</PreferenceScreen>

我见过其他解决方案,但没有一个包含如何在 PreferenceFragmentCompat 中执行此操作。

【问题讨论】:

    标签: android summary android-sharedpreferences edittextpreference


    【解决方案1】:

    由于这个问题仍然在谷歌上弹出,现在有一种更直接的方法来解决这个问题(使用 androidx)。

    <PreferenceScreen 
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:android="http://schemas.android.com/apk/res/android">
    
        <EditTextPreference
            android:key="prefFoobar"
            android:title="@string/preference_foobar"
            android:persistent="true"
            app:useSimpleSummaryProvider="true" />
    </PreferenceScreen>
    

    “app:useSimpleSummaryProvider”可以发挥所有作用。

    【讨论】:

      【解决方案2】:

      我认为,这与每个简单的 PreferenceFragment 中的方式相同: 在xml文件中:

      android:summary="@string/your_string_resource"
      

      在代码中:

          EditTextPreference editTextPreference = (EditTextPreference) findPreference(YOUR_PREFERENCE_KEY);
          editTextPreference.setSummary(sharedPreferences.getString(YOUR_PREFERENCE_KEY, defaultValue));
          editTextPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
              @Override
              public boolean onPreferenceChange(Preference preference, Object o) {
      
                  String yourString = o.toString();
                  sharedPreferences.edit().putString(YOUR_PREFERENCE_KEY, yourString).apply();
                  editTextPreference.setSummary(yourString);
      
                  return true;
              }
          });
      

      【讨论】:

        【解决方案3】:

        @grabarz121 的回答让我朝着正确的方向前进。这是我添加到首选项的内容:

        android:summary="@string/pref_device_id_summary"
        

        这是我修改/添加到 SettingsFragment 类的内容:

        public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
            addPreferencesFromResource(R.xml.preferences);
            sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
            setDeviceIdSummary();
        }
        
        public void setDeviceIdSummary() {
            final String deviceIdKey = getString(R.string.pref_device_id_key);
            String deviceIdDefault = getString(R.string.pref_device_id_default);
            String deviceIdValue = sharedPreferences.getString(deviceIdKey, deviceIdDefault);
        
            final EditTextPreference editTextPreference = (EditTextPreference) findPreference(deviceIdKey);
            editTextPreference.setSummary(deviceIdValue);
        
            editTextPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
                @Override
                public boolean onPreferenceChange(Preference preference, Object o) {
        
                    String newValue = o.toString();
                    sharedPreferences.edit().putString(deviceIdKey, newValue).apply();
                    editTextPreference.setSummary(newValue);
                    return true;
                }
            });
        }
        

        【讨论】:

          猜你喜欢
          • 2016-03-21
          • 1970-01-01
          • 2012-10-05
          • 2010-10-06
          • 2014-11-24
          • 1970-01-01
          • 1970-01-01
          • 2019-10-08
          相关资源
          最近更新 更多