android - 如何设置 edittext 首选项摘要并坚持使用

标签 android android-edittext preference summary

我已经在这方面退回了第四次,但我就是无法理解。我正在使用首选项 fragment 设置我的设置。我可以使设置生效,甚至可以在进行更改时更新“摘要”。但如果我离开设置屏幕再返回,摘要将恢复为默认文本。所以问题是,在使用 edittext 首选项时。您如何更新摘要以显示用户将设置更改为什么并使其在关闭屏幕和应用程序时保持不变?在这种情况下,当我的用户更改 mse_ip 时,摘要会更改为“MSE IP x.x.x.x”,但一旦我离开设置屏幕并返回,它就会返回到“0.0.0.0”,这是 @string/mseip 设置的内容。

首选项.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">     
    <EditTextPreference
            android:key="mse_ip"
            android:title="MSE IP"
            android:summary="@string/mseip"
            android:defaultValue="0.0.0.0"
            android:dialogTitle="IP Address for mse" />
    <EditTextPreference
            android:key="mse_username"
            android:title="Username"
            android:summary="MSE Username %s"
            android:defaultValue="Admin"
            android:dialogTitle="Username for mse" />
    <EditTextPreference
            android:key="mse_password"
            android:title="MSE Password"
            android:password="true"
            android:summary="******"
            android:defaultValue="Admin"
            android:dialogTitle="Password for mse" />
</PreferenceScreen>

偏好 fragment

package com.hmkcode.android;

import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;

/*public class PrefsFragment extends PreferenceFragment {

 @Override
 public void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);

  // Load the preferences from an XML resource
        addPreferencesFromResource(R.xml.preferences);
 } 
} */
public class PrefsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {

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

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

    // set texts correctly
    onSharedPreferenceChanged(null, "");

}

@Override
public void onResume() {
    super.onResume();
    // Set up a listener whenever a key changes
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}

@Override
public void onPause() {
    super.onPause();
    // Set up a listener whenever a key changes
    getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

    updatePreference(key); }
     private void updatePreference(String key){
            if (key.equals("mse_ip")){
                Preference preference = findPreference(key);
                if (preference instanceof EditTextPreference){
                    EditTextPreference editTextPreference =  (EditTextPreference)preference;
                    if (editTextPreference.getText().trim().length() > 0){
                        editTextPreference.setSummary("MSE IP  " + editTextPreference.getText());
                    }else{
                        editTextPreference.setSummary("MSE IP Not");
                    }
                }
            }
        }

}

设置偏好 Activity

import android.os.Bundle;
import android.app.Activity;

public class SetPreferenceActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getFragmentManager().beginTransaction().replace(android.R.id.content,
            new PrefsFragment()).commit();

    //setContentView(R.layout.activity_set_preference);
}
 }

最佳答案

通过使用 androidx preference library (参见 official guides ),添加以下属性就足够了:

<EditTextPreference
    ...
    app:useSimpleSummaryProvider="true" />

关于android - 如何设置 edittext 首选项摘要并坚持使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22651653/

相关文章:

java - listview回收早了吗?还是 Universal ImageLoader 错误地取消了?还是我的逻辑错了?

Android:编码前在哪里存储大量帧?

android - 通过 android :widgetLayout 自定义 CheckBoxPreference

android - java.lang.NoClassDefFoundError retrofit2.Utils

android - 如何使 Android Gradle 项目使用复制到 libs 文件夹中的 jar 文件?

java - 重新调整 EditText 中的文本 (android)

android - 为什么我的 EditText 复制/粘贴菜单在 EditText 下?如何更改弹出窗口的 z 顺序?

android - EditText 底线颜色在焦点上变化

firefox - 如何访问 "Open with/Save"对话框以获取下载链接?

java - Android 将图像添加到首选项?