如何在SharedPreference更改时更新TextView?
问题描述:
我一直在尝试以下方法来获取对SharedPreference所做的任何更改的textview更新,但我很难搞清楚我的下一步行动。任何人? :)如何在SharedPreference更改时更新TextView?
public class CallForwardActivity extends Activity implements
OnSharedPreferenceChangeListener {
SharedPreferences userInfo;
Context context;
UserController userControl;
private static final String USERINFO_FILE = "StoredUserInfo";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.callforward);
context = this;
userInfo = this.getSharedPreferences(USERINFO_FILE, 0);
userControl = new UserController(context);
final TextView setActiveNumberTV = (TextView)
findViewById(R.id.activeNumberTextView);
setActiveNumberTV.setText(userControl.GetActiveNumber());
final RelativeLayout showAvailablenumbers = (RelativeLayout)
findViewById(R.id.showAvailableNumbers);
showAvailablenumbers.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(getParent(),
AvailableNumbersActivity.class);
SettingsActivityGroup parentActivity =
(SettingsActivityGroup) getParent();
parentActivity.ReplaceView(
"Show Available Numbers Activity", i);
}
});
}
public void onSharedPreferenceChanged(SharedPreferences arg0,
String arg1) {
final TextView setActiveNumberTV = (TextView)
findViewById(R.id.activeNumberTextView);
setActiveNumberTV.setText("...");
}
}
答
在任何时候您都不会将sharedPreferenceChangedListener添加到您的sharedPreferences中。
试试这个:
userInfo.registerOnSharedPreferenceChangeListener(this);
你实例化对象的用户信息刚过。
答
您没有注册OnPreferenceChangedListener。请致电userInfo.registerOnSharedPreferenceChangeListener(this)
在onCreate
,它应该工作。
答
只是为了试试...
public class CallForwardActivity extends Activity implements OnSharedPreferenceChangeListener
{
SharedPreferences userInfo;
Context context;
UserController userControl;
private static final String USERINFO_FILE = "StoredUserInfo";
private TextView setActiveNumberTV;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.callforward);
context = this;
userInfo = this.getSharedPreferences(USERINFO_FILE, 0);
userInfo.registerOnSharedPreferenceChangeListener(this);
userControl = new UserController(context);
setActiveNumberTV = (TextView) findViewById(R.id.activeNumberTextView);
setActiveNumberTV.setText(userControl.GetActiveNumber());
final RelativeLayout showAvailablenumbers = (RelativeLayout) findViewById(R.id.showAvailableNumbers);
showAvailablenumbers.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
Intent i = new Intent(getParent(), AvailableNumbersActivity.class);
SettingsActivityGroup parentActivity = (SettingsActivityGroup)getParent();
parentActivity.ReplaceView("Show Available Numbers Activity", i);
}
});
}
public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1)
{
setActiveNumberTV.setText(arg0.getString(arg1, "default"));
}
}
你错过了注册onSharedPreferenceChnaged()..! – user370305 2012-02-22 12:55:22