当前位置: 首页 > 知识库问答 >
问题:

如何设置edittext首选项摘要并使其保持不变

田谦
2023-03-14

我已经倒退到第四名了,我只是不能得到它。我正在使用首选项片段设置我的设置。我可以让设置工作,我甚至可以得到“摘要”更新时,我做了更改。但是,如果我离开设置屏幕并回到它,摘要将返回默认文本。所以问题是,当使用edittext首选项时。您如何更新摘要,以便它显示用户更改的设置,并使其在关闭屏幕和应用程序时保持一致?在本例中,当我的用户更改mse_ip时,摘要将变为“MSE IP x.x.x.x”,但当我离开设置屏幕并返回时,它将返回“0.0.0.0”,这就是@string/mseip的设置。

<?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>
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");
                    }
                }
            }
        }

}

SetPreferenceActivity

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);
}
 }

共有1个答案

郭永怡
2023-03-14

您必须将OnPreferenceChangeListener设置为您的偏好。因此,在每个首选项更改时,调用setSummary将更改摘要显示。这可能是一个示例代码:

final Preference pref = getPreferenceManager().findPreference(
                PREF_KEY);
pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {

            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                pref.setSummary(newValue.toString());
                return true;
            }
        });

还应该在onCreate()中调用首选项的setSummary方法,以便Summary显示sharedPreference值。

 类似资料:
  • 关于首选项 首选项是关于您希望 Illustrator 如何工作的选项,包括显示、工具、标尺单位和导出信息。您的首选项存储在名为 “AIPrefs”(Windows) 或 “Adobe Illustrator Prefs”(Mac OS) 的文件中,每次您启动 Illustrator 时它也随之启动。要恢复 Illustrator 的默认设置,您可以删除或重命名首选项文件并重新启动 Illustr

  • 我是Android编程的新手,首先我想用SharedPreays做一个简单的选项菜单演示。我已经创建了基本的结构,但是我不知道如何将OnPreancceClickListener附加到Preation。尽管如此,我可以使用onSharedPreancceChanged方法,但是没有其他事件侦听器。(再次,我是初学者,所以我不知道为什么会这样。) 我已经阅读了有关创建菜单步骤的文档:https://

  • 关于首选项 为了让 Illustrator 根据您特定的工作流程尽可能流畅地运行,您需要根据自己的喜好设置首选项。 许多程序设置都存储在 Adobe Illustrator Prefs 文件中,其中包括常规显示选项、文件存储选项、性能选项、文字选项以及增效工具和暂存盘选项。其中大多数选项都是在首选项对话框中设置的。每次退出应用程序时都会存储首选项设置。 如果出现异常现象,可能是因为首选项已损坏。如

  • 我正在尝试创建一个自定义的首选项设置(它将包含一个标题、摘要和一个进度条,向用户指示同步过程)。我有一个问题,完全删除原来的标题和摘要,因为它看起来像是在布局缩进(更多细节见附图) 我创建了一个自定义布局: R.布局。手动同步布局 手动同步 ###############################################################################

  • 这是我正在使用的,用户代理可以成功设置,而下载首选项不能。 Windows 7、Chrome 26、Selenium-dotnet-2.31。2,chromedriver_win_26.0。1383 取自chromedriver。日志: 检查temp首选项文件在,没有设置和。

  • 以下各节介绍“首选项”对话框和可以使用此菜单执行的各种任务。 “首选项”对话框 要打开“首选项”对话框,请转到: “编辑”>“首选项”> [类别名称] (Windows) After Effects >“首选项”> [类别名称] (Mac OS) 使用以下键盘快捷键打开“首选项”>“常规”菜单: Ctrl+Alt+;(分号)(Windows) Command+Option+;(分号)(Mac OS