我在Android开发中使用Big Nerd Ranch指南(第2版)。到目前为止,这本书进展顺利,只是因为我发现他们的代码中存在错误而且我不知道如何修复它。我的onActivityResult
类中的CrimeFragment
方法检索用户选择的日期并使用该日期更新mCrime
,并更新按钮上的文本以显示最新日期。这只能在onActivityResult
方法中进行,但本书希望您将该行mDateButton.setText(mCrime.getDate().toString());
粘贴到另一个要在其他地方调用的活动中。好吧,所有这一切只是回到原始日期而不是用户选择的日期。
所以这是用户从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()
的新方法中,并在必要时调用它。它不起作用。对这个问题非常沮丧。对于如此受欢迎的书来说,这似乎是一个非常幼稚的错误。
感谢。
答案 0 :(得分:1)
尝试从DatePicker下面这个用户选择日期,我希望这会对你有所帮助。
public void pickdate(View view){
final Calendar c = Calendar.getInstance();
int mYear = c.get(Calendar.YEAR);
int mMonth = c.get(Calendar.MONTH);
int mDay = c.get(Calendar.DAY_OF_MONTH);
final Calendar c1 = Calendar.getInstance();
DatePickerDialog datePickerDialog = new DatePickerDialog(MainActivity.this,new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
c1.set(Calendar.YEAR, year);
c1.set(Calendar.MONTH, month);
c1.set(Calendar.DAY_OF_MONTH, day);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
datebutton.setText(dateFormat.format(c1.getTime())); //to set date on button in format yyyy-MM-dd
String date = datebtn.getText().toString();//to get date to string from button
//OR use below to assign directly
/*
String date = dateFormat.format(c1.getTime());
*/
/* DateFormat datefmt= DateFormat.getDateInstance(DateFormat.MEDIUM); // to get date format in Feb 31,3017
button.setText(datefmt.format(c1.getTime()));
string = button.getText().toString();*/
}
}, mYear, mMonth, mDay);
datePickerDialog.show();
long now = System.currentTimeMillis() - 1000;
datePickerDialog.getDatePicker().setMinDate(now);// To Disable previous dates and enables from present date in datepicker
datePickerDialog.getDatePicker().setMaxDate(now+31536000000L);// for 365 days 1000*60*60*24*365 mill_sec*sec*min*hours*days
}
一切顺利,