Reputation: 4827
I am trying to start time picker fragment from fragment and receive the result there.
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));
}
}
I get:
java.lang.ClassCastException: michlind.com.workcalendar.views.MainActivity@b61773f must implement OnTimeSetListener
at ---.com.workcalendar.views.TimePickerFragment.onAttach(TimePickerFragment.java:30)
Upvotes: 0
Views: 663
Reputation: 4069
Change your TimePickerFragment to like the below:
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));
}
}
And now modify your DataFragment class-
@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
}
Upvotes: 1