我目前正在使用SharedPreferences处理应用程序,并试图动态更改Prefs活动屏幕上显示的值。 在屏幕上,我有一个preferencelistview包含一年的月份和两个编辑框来存储关于所选月份的信息。在一个月的选择,我想几件事情发生:动态更改SharedPreferences
- 插入与选择的一个月数据库中的行(如果它没有被先前选择) - 这个我可以开始工作刚刚桃色
- 将sharedpreference编辑框的值更改为存储在数据库的行中的值 - 这是我遇到问题的地方
- 当编辑框更新时,它们应根据数据库更新数据库中的对应行选择月 - 工作没有问题。
所以,基本上,我的问题是项目#2。我有当一个新的月份从列表中选择一个检查一个函数:
public void setMonth(SharedPreferences sp) {
ContentValues cv = new ContentValues();
cv.clear();
int sel_month = Integer.valueOf(sp.getString("pActivityMonth", String.valueOf(this.month))); //listvew works with strings, convert to int
int stored_new = 0; //default value
int stored_ren = 0; //default value
Log.d(TAG, String.valueOf(sel_month));
String[] col = { Database.C_MONTH, Database.C_QNEW, Database.C_QRENEW };
String[] arg = { String.valueOf(sel_month) };
Cursor c = db.query(Database.RR_TABLE, col, Database.C_MONTH + "=?", arg, null, null, null);
if (c.getCount()<1) { //New month, insert row
cv.put(Database.C_MONTH, sel_month);
db.insertWithOnConflict(Database.RR_TABLE, null, cv, SQLiteDatabase.CONFLICT_IGNORE);
} else { //row exists, get stored values
Log.d(TAG, "cursor count: " + String.valueOf(c.getCount()));
c.moveToFirst();
stored_new = c.getInt(c.getColumnIndex(Database.C_QNEW));
stored_ren = c.getInt(c.getColumnIndex(Database.C_QRENEW));
Log.d(TAG, "stored_new: " + String.valueOf(stored_new));
}
//Change edittext preferences to stored values
editor.putString("pNewQuota", String.valueOf(stored_new));
editor.putString("pRenewQuota", String.valueOf(stored_ren));
editor.apply();
editor.commit();
}
所以,我选择一个新的月(7月),点击的EditText上的选项来更新信息一个(可以说我进入20),然后选择一个不同的月份(8月),默认值为0.如果我再次点击edittext,对话框将继续显示20而不是0.如果我将此0更改为其他值,它会存储在数据库的正确行中,但是在更改为另一个月(例如,回到7月)之后,此值将继续保持不变。 我的Logcat显示函数抓取正确的值,并且正在运行putString。 PreferenceScreen无法自行更新?谢谢你的帮助。
所以没有混淆:“编辑器”是活动的onCreate()方法中的全局集合。 – wileyCoyote 2012-07-16 22:15:21