Android 来自片段的开始时间选择器片段
我试图从片段中启动时间选择器片段,并在那里接收结果Android 来自片段的开始时间选择器片段,android,android-fragments,Android,Android Fragments,我试图从片段中启动时间选择器片段,并在那里接收结果 public class DataFragment extends Fragment implements TimePickerDialog.OnTimeSetListener{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //code set
public class DataFragment extends Fragment implements TimePickerDialog.OnTimeSetListener{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//code
setTodayBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DialogFragment newFragment = new TimePickerFragment();
newFragment.show(getFragmentManager(), "timePicker");
}
});
//code
}
@Override
public void onTimeSet(TimePicker timePicker, int i, int i1) {
//get info here
}
}
TimePickerFragment:
public class TimePickerFragment extends DialogFragment {
private TimePickerDialog.OnTimeSetListener mListener;
private Context context;
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.context = context;
try {
mListener = (TimePickerDialog.OnTimeSetListener) context;
} catch (ClassCastException e) {
throw new ClassCastException(context.toString() + " must implement OnTimeSetListener");
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
return new TimePickerDialog(context, mListener, hour, minute, DateFormat.is24HourFormat(context));
}
}
我得到:
java.lang.ClassCastException: michlind.com.workcalendar.views.MainActivity@b61773f must implement OnTimeSetListener
at ---.com.workcalendar.views.TimePickerFragment.onAttach(TimePickerFragment.java:30)
将TimePickerFragment更改为如下所示:
public class TimePickerFragment extends DialogFragment {
private TimePickerDialog.OnTimeSetListener mListener;
private Context context;
public void setListener(TimePickerDialog.OnTimeSetListener mListener) {
this.mListener = mListener;
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.context = context;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
return new TimePickerDialog(context, mListener, hour, minute, DateFormat.is24HourFormat(context));
}
}
现在修改您的DataFragment类-
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//code
setTodayBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
TimePickerFragment newFragment = new TimePickerFragment();
newFragment.setListener(this);
newFragment.show(getFragmentManager(), "timePicker");
}
});
//code
}
上下文是父活动。。。getParentFragment应返回父fragmentnewFragment.setListener(此);如果不应用,您也可以传递TimePickerDialog.OnTimeSetListener的引用,而不是此引用,在这种情况下,请不要实现OnTimeSetListener,只需将类型为ass的引用变量od传递给该方法即可。