我有一个包含 EditText 的 fragment ,当我单击该 EditText 时,会出现一个 DatePicker 对话框来选择日期。
fragment 文件
public class FirstFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_first, container, false);
EditText editText = (EditText) view.findViewById(R.id.visitDateFiled);
editText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DialogFragment picker = new DatePickerFragment();
picker.show(getFragmentManager(), "Date Picker");
}
});
return view;
}
对话框 fragment
public class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
Calendar c = Calendar.getInstance();
c.set(year, month, day);
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
String formattedDate = sdf.format(c.getTime());
}
}
问题我不知道如何将数据(选定的日期)从DialogFragment传递到Fragment?
我读了一些主题,但这对我感到困惑没有帮助(抱歉再次问这个问题)。
最佳答案
更新了代码
fragment 文件
public class FirstFragment extends Fragment implements DatePickerDialogFragmentEvents{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_first, container, false);
EditText editText = (EditText) view.findViewById(R.id.visitDateFiled);
editText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DialogFragment picker = new DatePickerFragment();
picker.setDatePickerDialogFragmentEvents(FirstFragment.this); //Changed
picker.show(getFragmentManager(), "Date Picker");
}
});
return view;
}
//This is where you will get selected date value
@Override
public void onDateSelected(String date) {
String selectedDate = date;
}
}
对话框 fragment
public class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
//Interface created for communicating this dialog fragment events to called fragment
public interface DatePickerDialogFragmentEvents{
void onDateSelected(String date);
}
DatePickerDialogFragmentEvents dpdfe
public void setDatePickerDialogFragmentEvents(DatePickerDialogFragmentEvents dpdfe){
this.dpdfe = dpdfe;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
Calendar c = Calendar.getInstance();
c.set(year, month, day);
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
String formattedDate = sdf.format(c.getTime());
dpdfe.onDateSelected(formattedDate); //Changed
}
}
所以我在dialogfragment类中创建了一个名为DatePickerDialogFragmentEvents的接口(interface),并在调用者 fragment 中实现了它。当您创建dialogfragment实例时,从调用者 fragment 中,使用对话框 fragment 类的setDatePickerDialogFragmentEvents方法设置 fragment 的DatePickerDialogFragmentEvents实例。
关于android - 将数据从 DialogFragment 发送到 Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26734432/