时间太紧,导致写得有点慢,现在来补上:
第12 章的第二个挑战练习难度的确有点大,但还好,弄懂了就好写了,按书上步骤来:
1.更改onCreateDialog(Bundle)为onCreateView():
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
View view = inflater.inflate(R.layout.dialog_date, container, false);
mDatePicker = (DatePicker) view.findViewById(R.id.dialog_date_picker);
mDatePicker.init(year, month, day, null);
Ok = (Button) view.findViewById(R.id.date_ok);
Ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int year = mDatePicker.getYear();
int month = mDatePicker.getMonth();
int day = mDatePicker.getDayOfMonth();
Date date = new GregorianCalendar(year, month, day).getTime();
/**
* 将data的值传到intent中,以便回传给CrimeFragment
*/
Intent intent = new Intent();
intent.putExtra(EXTRA_DATE, date);
getActivity().setResult(Activity.RESULT_OK, intent);
getActivity().finish();
}
});
return view;
}
2.创建一个activity托管fragment:
public class DateActivity extends SingleFragmentActivity {
/**
* 继承SingleFragmentActivity用来托管DatePickerFragment()
* @return
*/
protected Fragment createFragment(){
return new DatePickerFragment();
}
}
3.以startActivityForResult()打开活动:
mDateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
/**
* 更改代码为以下代码,以startActivityForResult(intent, REQUEST_DATE);启动活动
* 而不是启动一个dialog
*/
Intent intent = new Intent(getActivity(), DateActivity.class);
startActivityForResult(intent, REQUEST_DATE);
}
});
并用onActivityResult()接收返回的数据:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != Activity.RESULT_OK) {
return;
}
/**
* 接收活动返回的data值
*/
if (requestCode == REQUEST_DATE) {
Date date = (Date) data.getSerializableExtra(DatePickerFragment.EXTRA_DATE);
mCrime.setDate(date);
updateDate();
}
}
其实主要步骤不是太多,这题的意义就在于搞懂这一章结尾的那些概念,项目源码:Demo
若有不足,敬请指教 :)