Chl*_*bta 3 android android-fragments
当我单击 EditText 时,我有一个包含 EditText 的片段,一个 DatePicker 对话框出现以选择日期。
片段文件
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;
}
Run Code Online (Sandbox Code Playgroud)
对话片段
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());
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道如何将数据(选定日期)从 DialogFragment 传递到 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;
}
}
Run Code Online (Sandbox Code Playgroud)
对话片段
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
}
}
Run Code Online (Sandbox Code Playgroud)
所以我在你的 dialogfragment 类中创建了一个名为 DatePickerDialogFragmentEvents 的接口,并在调用者片段中实现了它。从调用者片段创建对话框片段的实例时,使用对话框片段类的 setDatePickerDialogFragmentEvents 方法设置片段的 DatePickerDialogFragmentEvents 实例。
我已经解决了这个问题,感谢这个话题,这个话题的第二个回应。
日期选择器片段.java
@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());
// in this part I stored the selected date into the intent
Intent i = new Intent();
i.putExtra("selectedDate",formattedDate);
getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, i);
}
Run Code Online (Sandbox Code Playgroud)
片段文件
public static final int DATEPICKER_FRAGMENT=1; // adding this line
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_feeding, container, false);
EditText editText = (EditText) view.findViewById(R.id.foodDeliveryDateFiled);
editText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DialogFragment picker = new DatePickerFragment();
picker.setTargetFragment(FeedingFragment.this, DATEPICKER_FRAGMENT);
picker.show(getFragmentManager().beginTransaction(), "Date Picker");
}
});
return view;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode) {
case DATEPICKER_FRAGMENT:
if (resultCode == Activity.RESULT_OK) {
// here the part where I get my selected date from the saved variable in the intent and the displaying it.
Bundle bundle=data.getExtras();
String resultDate = bundle.getString("selectedDate","error");
EditText editText = (EditText) getView().findViewById(R.id.foodDeliveryDateFiled);
editText.setText(resultDate);
}
break;
}
Run Code Online (Sandbox Code Playgroud)