在我的 Activity 中,我根据存储的首选项更新用户界面。 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,但没有成功。
我在 getStringSet 上遇到了类似的问题,文档在那里提供了帮助
Note that you must not modify the set instance returned by this call. The consistency of the stored data is not guaranteed if you do, nor is your ability to modify the instance at all.
我是一名优秀的程序员,十分优秀!