Reputation: 47
I am trying to get time from timepicker in a FragmentActivity. For this reason I create a class named TimePickerFragment
. this is the class:
public class TimePickerFragment extends DialogFragment {
public static TimePickerFragment newInstance() {
return new TimePickerFragment();
}
private TimePickerDialog.OnTimeSetListener listener;
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
return new TimePickerDialog(getActivity(), listener, hour, minute, DateFormat.is24HourFormat(getActivity()));
}
public void setListener(TimePickerDialog.OnTimeSetListener listener) {
this.listener = listener;
}
And this is my Fragmnet activity:
public class CreateClass extends DialogFragment implements TimePickerDialog.OnTimeSetListener {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.activity_create_class, container, false);
//findingbyid
TimePickerFragment.newInstance().setListener(this);
starttime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment timepicker = new TimePickerFragment();
timepicker.show(getFragmentManager(), "time picker");
flag = 1;
}
});
endtime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment timepicker = new TimePickerFragment();
timepicker.show(getFragmentManager(), "time picker");
flag = 2;
}
});
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
int h = hourOfDay;
int m = minute;
Displaytime(h, m);
}
public void Displaytime(int h, int m) {
if(flag == 1){
if(h>12){
stimeedit.setText(String.valueOf(h-12)+":"+(String.valueOf(m)+" pm"));
}else if (h==12){
stimeedit.setText("12:"+(String.valueOf(m)+" pm"));
}else if (h<12){
if(h!=0){
stimeedit.setText(String.valueOf(h)+":"+(String.valueOf(m)+" am"));
}
}
}
if(flag == 2){
if(h>12){
etimeedit.setText(String.valueOf(h-12)+":"+(String.valueOf(m)+" pm"));
}else if (h==12){
etimeedit.setText("12:"+(String.valueOf(m)+" pm"));
}else if (h<12){
if(h!=0){
etimeedit.setText(String.valueOf(h)+":"+(String.valueOf(m)+" am"));
}
}
}
}}
with this code, after pressing the button timepickerFragment is showing and I can choose time but the time doesn't set in edittext. if i set any value in edittext in onclicklister method that perfectly works. I am giving an example:
starttime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment timepicker = new TimePickerFragment();
timepicker.show(getFragmentManager(), "time picker");
stimeedit.settext("hello");
}
});
in stimeedit, "hello" is set perfectly. please, can anyone tell me, how can I add time in edittext.
Upvotes: 0
Views: 93
Reputation: 2940
You are not setting the listener on the same instance that gets displayed. They are 2 different objects
TimePickerFragment.newInstance().setListener(this);
This is the first instance which has the listener but is not displayed on screen. That is why you are not receiving any callbacks.
starttime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment timepicker = new TimePickerFragment();
timepicker.show(getFragmentManager(), "time picker");
flag = 1;
}
});
endtime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment timepicker = new TimePickerFragment();
timepicker.show(getFragmentManager(), "time picker");
flag = 2;
}
});
And here you have two other instances which you want to listen to.
Upvotes: 1