log.setTargetFragment(MainFragment.this,REQUEST_DATE);
dialog.show(manager,DIALOG_DATE); //显示DialogFragment
}
});
return v;
}
//响应DatePicker对话框
@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());
}
super.onActivityResult(requestCode, resultCode, data);
}
}
4.DatePickerFragment.java
直接获取保存在arguments中的数据,并将数据显示,最后设置目标fragment。
package com.example.mytest;
import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.DatePicker;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class DatePickerFragment extends DialogFragment{
private static final String ARG_DATE="date";
public static final String EXTRA_DATE= "com.example.mytest.date";
private DatePicker mDatePicker;
//便于被调用传递数据给DatePickerFragment
//保存日期到argument bundle中,便于DatePickerFragment直接获取
public static DatePickerFragment newInstance(Date date){
Bundle args=new Bundle();
args.putSerializable(ARG_DATE,date);
DatePickerFragment fragment=new DatePickerFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
//获取Date对象并初始化DatePicker
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);
//添加DatePicker
View v=LayoutInflater.from(getActivity())
.inflate(R.layout.dialog_date,null);
mDatePicker=(DatePicker)v.findViewById(R.id.dialog_date_picker);
mDatePicker.init(year,month,day,null);
return new AlertDialog.Builder(getActivity())
.setView(v)
.setTitle(R.string.date_picker_title)
.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);
}
})
.create();
}
//回调目标fragment
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);
}
}
5.MainActivity.java
托管MainFragment,使界面呈现出来。
package com.example.mytest;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity