12.1
1.为对话框标题添加字符串资源(Srings.xml)
<string name="date_picker_title">Date of crime:</string>
2.创建DatePickerFragment新类
3.创建DialogFragment(DatePickerFragment.java)
extends DialogFragment
@Override
public Dialog onCreateDialog(Bundle savedInStanceState) {
return new AlertDialog.Builder(getActivity())
.setTitle(R.string.date_picker_title)
.setPositiveButton(android.R.string.ok, null)
.create();
}
12.1.1
1.显示DialogFragment(CrimeFragment.java)
private static final String DIALOG_DATE = "DialogDate";
删掉,然后加上下面代码
mDateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager manager = getFragmentManager();
DatePickerFragment dialog = new DatePickerFragment();
dialog.show(manager, DIALOG_DATE);
}
});
12.1.2
1.给AlertDialog添加DatePicker(DatePickerFragment.java)
View v = LayoutInflater.from(getActivity())
.inflate(R.layout.dialog_date, null);
.setView(v)
12.2
12.2.1
1、添加newInstance(Date)方法(DatePickerFragment.java)
private static final String ARG_DATE = "date";
private DatePicker mDatePicker;
public static DatePickerFragment newInstance(Date date) {
Bundle args = new Bundle();
args.putSerializable(ARG_DATE, date);
DatePickerFragment fragment = new DatePickerFragment();
fragment.setArguments(args);
return fragment;
}
2.添加newInstance()方法(CrimeFragment.java)
删掉
DatePickerFragment dialog = new DatePickerFragment();
然后添上
DatePickerFragment dialog = DatePickerFragment
.newInstance(mCrime.getDate());
3.获取date对象并初始化DatePicker(DatePickerFragment.java)
Date date = (Date) getArguments().getSerializable(ARG_DATE);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
mDatePicker = (DatePicker) v.findViewById(R.id.dialog_date_picker);
mDatePicker.init(year, month, day, null);
12.2.2
1.设置目标fragment(CrimeFragment.java)
private static final int REQUEST_DATE = 0;
dialog.setTargetFragment(CrimeFragment.this, REQUEST_DATE);
2.回调目标fragment(DatePickerFragment.java)
public static final String EXTRA_DATE ="com.bignerdranch.android.criminalintent.date";
private void sendResult(int resultCode, Date date) {
if (getTargetFragment() == null) {
return;
}
Intent intent = new Intent();
intent.putExtra(EXTRA_DATE, date);
getTargetFragment()
.onActivityResult(getTargetRequestCode(), resultCode, intent);
}
3.一切是否都OK(DatePickerFragment.java)
删掉
.serPositiveButton(android.R.string.ok,null);
加上
.setPositiveButton(android.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);
}
})
4.响应DatePickerFragment对话框(CrimeFragment.java)
@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);
mDateButton.setText(mCrime.getDate().toString());
}
}