我在Android開發(第二版)上使用Big Nerd Ranch指南。這本書目前進展順利,只是我注意到了他們代碼中的一個錯誤,我不知道如何解決它。我的CrimeFragment
類中的onActivityResult
方法檢索用戶選擇的日期並使用該日期更新mCrime
,並更新按鈕上的文本以顯示最新的日期。這隻能在onActivityResult
方法內完成,但本書希望您將行mDateButton.setText(mCrime.getDate().toString());
粘貼到單獨的活動中,以便在別處調用。那麼,所做的只是恢復原來的日期而不是用戶選擇的日期。如何從DatePicker中檢索用戶選擇的日期?
所以這是代碼,其中用戶從DatePicker的對話框中挑選他/她的約會:
return new AlertDialog.Builder(getActivity())
.setView(v)
.setTitle(R.string.date_picker_title)
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
int year = mDatePicker.getYear();
int month = mDatePicker.getMonth();
int day = mDatePicker.getDayOfMonth();
Date date = new GregorianCalendar(year, month, day).getTime();
sendResult(Activity.RESULT_OK, date);
}
})
.setNegativeButton(R.string.cancel, null)
.create();
和代碼發送由onActivityResult
回升的結果,這裏是代碼:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode != Activity.RESULT_OK){
return;
}
if(requestCode == REQUEST_DATE){
Date date = (Date) data.getSerializableExtra(DatePickerFragment.EXTRA_DATE);
mCrime.setDate(date);
updateDate();
/*
* The code mDateButton.setText(mCrime.getDate().toString()) only works here!!!
* */
}
}
private void updateDate() {
mDateButton.setText(mCrime.getDate().toString());
}
該行代碼僅適用於該方法,但我被告知將其放入名爲updateDate()
的新方法中,並在需要的地方調用它。它不起作用。非常沮喪的這個問題。對於這樣一本暢銷書來說,這似乎是一個非常幼稚的錯誤。
謝謝。