在我的活动中,我根据存储的偏好更新用户界面。 updateUI的代码如下:
private void updateUI()
{
//preferences = getSharedPreferences(Select.PREF_FILE_NAME, MODE_PRIVATE);
preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
toggle = (Button)findViewById(R.id.toggleButton);
incommingEdit = (Button)findViewById(R.id.IncommingEditButton);
outgoingEdit = (Button)findViewById(R.id.outgoingEditButton);
missedEdit = (Button)findViewById(R.id.missedEditButton);
save = (Button)findViewById(R.id.saveButton);
cancel = (Button)findViewById(R.id.cancelButton);
incommingCheck = (CheckBox)findViewById(R.id.incommingCheck);
outgoingCheck = (CheckBox)findViewById(R.id.outgoingCheck);
missedCheck = (CheckBox)findViewById(R.id.missedCheck);
incommingTextView = (TextView) findViewById(R.id.incommingTextView);
outgoingTextView = (TextView) findViewById(R.id.outgoingTextView);
missedTextView = (TextView) findViewById(R.id.missedTextView);
//Disable all the edit buttons until their checkboxes are checked.
incommingEdit.setEnabled(false);
outgoingEdit.setEnabled(false);
missedEdit.setEnabled(false);
//Display the messages in the text views.
incommingTextView.setText(preferences.getString("incommingMsgPhone", "Currently there are no messages saved."));
outgoingTextView.setText(preferences.getString("outgoingMsgPhone", "Currently there are no messages saved."));
missedTextView.setText(preferences.getString("missedMsgPhone", "Currently there are no messages saved."));
//Check the check boxes.
if(preferences.getInt("incommingPhone", 0) == Calls.INCOMING_TYPE)
{
incommingCheck.setChecked(true);
incommingEdit.setEnabled(true);
}
if(preferences.getInt("outgoingPhone", 0) == Calls.OUTGOING_TYPE)
{
outgoingCheck.setChecked(true);
outgoingEdit.setEnabled(true);
}
if(preferences.getInt("missedPhone", 0) == Calls.MISSED_TYPE)
{
missedCheck.setChecked(true);
missedEdit.setEnabled(true);
}
//Check if the application is on or off and set the text of the button.
//preferences = getSharedPreferences(Select.PREF_FILE_NAME, MODE_PRIVATE);
boolean on = preferences.getBoolean("isOn", false);
if(!on)
toggle.setText("Turn On");
else
toggle.setText("Turn off");
}
以下是我保存所有这些偏好的方法:
save.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
//Save all in the preference file and exit.
//preferences = getSharedPreferences(Select.PREF_FILE_NAME, MODE_PRIVATE);
Editor editor = preferences.edit();
editor.putInt("incommingPhone", incomming);
editor.putInt("outgoingPhone", outgoing);
editor.putInt("missedPhone", missed);
editor.putString("incommingMsgPhone", incommingMsg);
editor.putString("outgoingMsgPhone", outgoingMsg);
editor.putString("missedMsgPhone", missedMsg);
editor.commit();
finish();
}
});
我的UI在第二次运行我的应用程序时正确更新,但在第三次或第四次我获得默认首选项值。我甚至尝试使用getdefaultpreferences而不是getsharedpreferences,但没有运气。
答案 0 :(得分:5)
我遇到了与getStringSet类似的问题,该文档帮助了
请注意,您不得修改此调用返回的set实例。 如果您这样做,则无法保证存储数据的一致性 你根本无法修改实例。
答案 1 :(得分:3)
在使用之前尝试清除编辑器。换句话说:
Editor editor = preferences.edit();
editor.clear();
editor.putInt("incommingPhone", incomming);
editor.commit();
我和你的问题完全相同,这对我有用。对于我的整个代码示例,请参阅this post on my blog
答案 2 :(得分:2)
我遇到了类似的问题 - 我保留了我的String变量,但没有别的。 作为一个穷人的解决方法,我将一切都保存为字符串。
答案 3 :(得分:0)
试试这个..
preferences = activity.getSharedPreferences("Share", Context.MODE_PRIVATE);`
答案 4 :(得分:-1)
这是例子:
public void saveFavName(String what)
{
myPrefs= getSharedPreferences("myPrefs", MODE_PRIVATE);
SharedPreferences.Editor es = myPrefs.edit();
es.putString( "value", what); // add or overwrite someValue
es.commit(); // this saves to disk and notifies observers
}