我以非標準方式使用首選項屏幕來設置名爲Reminder的類的值。當我打開EditReminder活動與現有的提醒,它拉從一個意圖適當的提醒,然後初始化偏好屏幕像這樣:Android偏好值行爲奇怪
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("temp_name",reminder.getName());
Toast.makeText(getActivity(), reminder.getName(), Toast.LENGTH_LONG).show();
editor.putString("temp_description",reminder.getDescription());
editor.putString("temp_time",timeFormat.format(reminder.getDate().getTime()));
editor.putString("temp_date",dateFormat.format(reminder.getDate().getTime()));
editor.apply();
name.setSummary(reminder.getName());
description.setSummary(reminder.getDescription());
time.setSummary(timeFormat.format(reminder.getDate().getTime()));
date.setSummary(dateFormat.format(reminder.getDate().getTime()));
當我第一次打開應用程序,並嘗試編輯現有的提醒,這工作完美無瑕。但是,從那時起,摘要將被正確設置爲正確的值,並且如果我立即保存正確的值得到保存,所以代碼似乎正在工作。除了如果我點擊一個首選項,預填充的值是以前的提醒。
所以,如果我打開Reminder1並點擊名字,它prefills的EditText上對話框,「Reminder1」
然後,如果我打開Reminder2並點擊名字,它以「Reminder1」
prefills的EditText上對話框然後,如果我打開Reminder3並點擊名稱,它用「Reminder2」預填充edittext對話框
因爲我的logcat滯後了大約8分鐘,所以敬酒是爲了測試價值的,但那是另一個問題。吐司顯示正確的值。另外,正如我所提到的,總結設置爲正確的值,如果我保存而不做任何更改,它會保存正確的值。我很困惑。
每請求時,這裏是我保存用戶設置的值代碼:
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
reminder.setName(sharedPreferences.getString("temp_name",""));
reminder.setDescription(sharedPreferences.getString("temp_description", ""));
Calendar date = Calendar.getInstance();
SimpleDateFormat timeFormat = new SimpleDateFormat("h:mm aa"+"EEEE, MMMM d, yyyy");
try {
date.setTime(timeFormat.parse(sharedPreferences.getString("temp_time", "") + sharedPreferences.getString("temp_date", "")));
}
catch (ParseException e){
Log.e("Minder","Parse Error");
}
long time = date.getTimeInMillis(); //Drop seconds
time = time/60000; //
time = time*60000; //
date.setTimeInMillis(time); //
reminder.setDate(date); //Store reminder date + time
ReminderDBHelper dbHelper = ReminderDBHelper.getInstance(this);
SQLiteDatabase database = dbHelper.openDatabase();
reminder.setId((int) Reminder.saveReminder(database,reminder));//Save reminder to database
和相關的XML:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference android:title="Name"
android:key="temp_name"
android:summary="@string/name_summary"
android:inputType="textCapSentences"
android:singleLine="true"/>
<EditTextPreference android:title="Description"
android:key="temp_description"
android:summary="@string/description_summary"
android:inputType="textCapSentences|textMultiLine"/>
<us.bridgeses.Minder.util.TimePreference android:title="Time"
android:key="temp_time"
android:inputType="time"/>
<us.bridgeses.Minder.util.DatePreference android:title="Date"
android:key="temp_date"
android:inputType="date"/>
</PreferenceScreen>
我們需要看到更多的代碼。顯示UI代碼,根據首選項填充值。 – 2014-08-31 02:58:18
您需要了解如何使用Eclipse或Android Studio調試器。 – 2014-08-31 03:08:42
我正在處理它。但作爲對我的問題的回答,這是一個非常無益的評論。 – TBridges42 2014-08-31 03:09:57