如何修复片段对话框中的显示方法
How to fix show method in FragmentDialog
我编写此代码是为了在我 运行 应用程序停止工作时在我的项目中显示时间。但是,当我删除 show 方法程序时,当我按下 Button
时,程序没有显示任何内容
任何帮助请
这是代码
public class AlarmFragment extends Fragment implements
TimePickerDialog.OnTimeSetListener{
private Button clockBtn;
private TextView time;
public AlarmFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view= inflater.inflate(R.layout.fragment_alarm, container, false);
time = view.findViewById(R.id.alarm_time);
clockBtn= view.findViewById(R.id.clock_btn);
clockBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment clock= new TimeClock();
///////////show method /////////
clock.show(getActivity().getSupportFragmentManager(),"Time Picker");
}
});
return view;
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
time.setText("Time:" + hourOfDay +" : "+minute);
}}
这是时钟片段
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import java.util.Calendar;
public class TimeClock extends DialogFragment {
@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(), (TimePickerDialog.OnTimeSetListener) getActivity(), hour, minute, android.text.format.DateFormat.is24HourFormat(getActivity()));
}
}
Edit:- 所以我改了上面的return语句,然后works.ButAlarmFragment中的onTimeSet方法没有执行
我是这样做的:-
Activity activity = new AlarmFragment().getActivity();
return new TimePickerDialog(getActivity(), (TimePickerDialog.OnTimeSetListener)activity, hour, minute, android.text.format.DateFormat.is24HourFormat(getActivity()));
在承载您的 AlarmFragment
的 Activity
中,您必须实施 TimePickerDialog.OnTimeSetListener
。
例如:
public class MainActivity implements TimePickerDialog.OnTimeSetListener {
...
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Toast.makeText(this, "chosen hour of day: " + hourOfDay, Toast.LENGTH_LONG).show();
}
}
你得到 ClassCastException
因为你的 getActivity
不是 TimePickerDialog.OnTimeSetListener
,但你的 AlarmFragment
是:
// this is where it fails, change this line, do not copy
return new TimePickerDialog(getActivity(), (TimePickerDialog.OnTimeSetListener) getActivity(), hour, minute, android.text.format.DateFormat.is24HourFormat(getActivity()));
您可以重构 TimeClock
class 以委托侦听器:
public class TimeClock extends DialogFragment {
private TimePickerDialog.OnTimeSetListener listener;
public void setOnTimeSetListener(TimePickerDialog.OnTimeSetListener listener) {
this.listener = 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);
// Now delegates the listener to the constructor
return new TimePickerDialog(getActivity(), listener, hour, minute, android.text.format.DateFormat.is24HourFormat(getActivity()));
}
}
并在TimeClock.show
之前设置你的监听器:
DialogFragment clock= new TimeClock();
clock.setOnTimeSetListener(this);
clock.show(getActivity().getSupportFragmentManager(), "Time Picker");
我编写此代码是为了在我 运行 应用程序停止工作时在我的项目中显示时间。但是,当我删除 show 方法程序时,当我按下 Button
时,程序没有显示任何内容任何帮助请
这是代码
public class AlarmFragment extends Fragment implements
TimePickerDialog.OnTimeSetListener{
private Button clockBtn;
private TextView time;
public AlarmFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view= inflater.inflate(R.layout.fragment_alarm, container, false);
time = view.findViewById(R.id.alarm_time);
clockBtn= view.findViewById(R.id.clock_btn);
clockBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment clock= new TimeClock();
///////////show method /////////
clock.show(getActivity().getSupportFragmentManager(),"Time Picker");
}
});
return view;
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
time.setText("Time:" + hourOfDay +" : "+minute);
}}
这是时钟片段
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import java.util.Calendar;
public class TimeClock extends DialogFragment {
@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(), (TimePickerDialog.OnTimeSetListener) getActivity(), hour, minute, android.text.format.DateFormat.is24HourFormat(getActivity()));
}
}
Edit:- 所以我改了上面的return语句,然后works.ButAlarmFragment中的onTimeSet方法没有执行 我是这样做的:-
Activity activity = new AlarmFragment().getActivity();
return new TimePickerDialog(getActivity(), (TimePickerDialog.OnTimeSetListener)activity, hour, minute, android.text.format.DateFormat.is24HourFormat(getActivity()));
在承载您的 AlarmFragment
的 Activity
中,您必须实施 TimePickerDialog.OnTimeSetListener
。
例如:
public class MainActivity implements TimePickerDialog.OnTimeSetListener {
...
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Toast.makeText(this, "chosen hour of day: " + hourOfDay, Toast.LENGTH_LONG).show();
}
}
你得到 ClassCastException
因为你的 getActivity
不是 TimePickerDialog.OnTimeSetListener
,但你的 AlarmFragment
是:
// this is where it fails, change this line, do not copy
return new TimePickerDialog(getActivity(), (TimePickerDialog.OnTimeSetListener) getActivity(), hour, minute, android.text.format.DateFormat.is24HourFormat(getActivity()));
您可以重构 TimeClock
class 以委托侦听器:
public class TimeClock extends DialogFragment {
private TimePickerDialog.OnTimeSetListener listener;
public void setOnTimeSetListener(TimePickerDialog.OnTimeSetListener listener) {
this.listener = 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);
// Now delegates the listener to the constructor
return new TimePickerDialog(getActivity(), listener, hour, minute, android.text.format.DateFormat.is24HourFormat(getActivity()));
}
}
并在TimeClock.show
之前设置你的监听器:
DialogFragment clock= new TimeClock();
clock.setOnTimeSetListener(this);
clock.show(getActivity().getSupportFragmentManager(), "Time Picker");