我在线获取此代码,我希望对其进行更改。基本上,当我单击“显示共享首选项”,然后单击“首选项”屏幕,进行一些更改然后单击“上一步”时,显示的首选项不会更新,直到我再次单击“显示共享首选项”按钮。如何让首选项自动更新......我是否需要听众?
PreferenceDemoTestActivity.java
package Preference.Demo;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class PreferenceDemoTestActivity extends Activity {
TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btnPrefs = (Button) findViewById(R.id.btnPrefs);
Button btnGetPrefs = (Button) findViewById(R.id.btnGetPreferences);
textView = (TextView) findViewById(R.id.txtPrefs);
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnPrefs:
Intent intent = new Intent(PreferenceDemoTestActivity.this,
PrefsActivity.class);
startActivity(intent);
break;
case R.id.btnGetPreferences:
displaySharedPreferences();
break;
default:
break;
}
}
};
btnPrefs.setOnClickListener(listener);
btnGetPrefs.setOnClickListener(listener);
}
private void displaySharedPreferences() {
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(PreferenceDemoTestActivity.this);
String username = prefs.getString("username", "Default NickName");
String passw = prefs.getString("password", "Default Password");
boolean checkBox = prefs.getBoolean("checkBox", false);
String listPrefs = prefs.getString("listpref", "Default list prefs");
StringBuilder builder = new StringBuilder();
builder.append("Username: " + username + "\n");
builder.append("Password: " + passw + "\n");
builder.append("Keep me logged in: " + String.valueOf(checkBox) + "\n");
builder.append("List preference: " + listPrefs);
textView.setText(builder.toString());
}
}
PrefsActivity.java
package Preference.Demo;
import android.os.Bundle;
import android.preference.PreferenceActivity;
public class PrefsActivity extends PreferenceActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
}
}
main.xml中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btnPrefs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Preferences Screen" />
<Button
android:id="@+id/btnGetPreferences"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Display Shared Preferences" />
<TextView
android:id="@+id/txtPrefs"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
答案 0 :(得分:1)
使用Activity SharedPreferences
方法中onResume()
的值简单更新变量,然后更新UI。
您的值没有变化,因为即使您在首选项屏幕中更新它们,您的Activity手动简单恢复其旧实例并使用存储在变量中的值。
在您的情况下,来自displaySharedPreferences()
的简单来电onResume()
即可。
答案 1 :(得分:0)
您可以在onCreate()
方法中注册更改:
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
然后使用:
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
SharedPreferences.Editor editor = sharedPreferences.edit();
// Update your preferences here
}
然后不要忘记在onDestroy()
中取消注册:
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);