用户更改设置值

时间:2016-08-27 17:27:33

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

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

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

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

2 个答案:

答案 0 :(得分:1)

您可以使用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);
    }
}

这应该可行,并且会在下次打开应用时保存价值! 如果您对代码有任何问题,请告诉我,我刚刚快速启动它

答案 1 :(得分: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);