【问题标题】:Update Textview right after user change settings value用户更改设置值后立即更新 Textview
【发布时间】:2023-04-03 20:41:01
【问题描述】:

在我的应用中,我让用户选择要显示的名称。它应该显示为: 你好usertext

我可以成功更新设置。我使用了 PreferenceActivity。 我也可以更改值。但是要更改所选文本视图中的文本,我必须重新启动应用程序。

如何在用户更新设置中的值后立即更新我的文本视图?

【问题讨论】:

  • 请显示您目前使用的代码
  • 你可以使用Preference.OnPreferenceChangeListener
  • @BR89 我的代码和LBJ33下面的代码非常相似。
  • @ahmad aghazadeh 我该怎么做?请给我一些例子

标签: java android user-controls application-settings preferenceactivity


【解决方案1】:
Preference.OnPreferenceChangeListener changeListener = new Preference.OnPreferenceChangeListener() {
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        // Code goes here            
        return true;
    }
};

EditTextPreference pref = (EditTextPreference)findPreference(getString(R.string.pref1));
pref1.setOnPreferenceChangeListener(changeListener);

EditTextPreference pref2 = (EditTextPreference)findPreference(getString(R.string.pref2));
pref2.setOnPreferenceChangeListener(changeListener);

【讨论】:

    【解决方案2】:

    您可以为此使用 SharedPreferences,但不要忘记在设置值后使用 .apply。这是一个示例(不要忘记更改值以匹配您的 editText、按钮、类等):

    活动二(他们输入新值并保存的地方):

    public class settings extends  MainActivity {
    private Button mButton;
    private EditText mEditText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings);
        mButton = (Button) findViewById(R.id.submit);
        mEditText = (EditText) findViewById(R.id.editTxtUsername);
    
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0);
                SharedPreferences.Editor editor = pref.edit();
                if (mEditText.getText().length() > 0) {
                    editor.putString("username", mEditText.getText().toString());
                    editor.apply();
    
                } else Toast.makeText(getApplicationContext(), "Please enter a valid username.", Toast.LENGTH_LONG).show();
            }
        });
        }
    }
    

    活动一(要查看用户名的地方):

     public class MainActivity extends AppCompatActivity {
    
    private TextView mTxtUsername;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTxtUsername = (TextView) findViewById(R.id.txtUsername);
        SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0);
        String username = pref.getString("username", "");
    
        mTxtUsername.setText(username);
        }
    }
    

    这应该可以工作,并且会在他们下次打开应用程序时保存该值! 如果您对代码有任何问题,请告诉我,我只是快速整理一下

    【讨论】:

    • thanks.exactly 那是我做的。但我遇到的问题是 textview 的价值在我关闭并重新打开我的应用程序之前不会更新。我需要找到一种方法来更新 textview 之后我更新了设置中的值。感谢@LBJ33 的帮助
    • LBJ33 它起作用了!谢谢虽然我发现在 onCreate() 方法中将这一行放在 setContentView() 行之前也可以工作,但前提是我在我的首选项 xml 文件中声明了默认值。 PreferenceManager.setDefaultValues(this, R.xml.preferences, false);感谢您的回答。它按我的预期工作
    猜你喜欢
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2018-06-04
    • 2012-10-03
    • 2013-10-11
    • 2011-02-23
    相关资源
    最近更新 更多