DialogFragment - 屏幕旋转之后保持监听器 [英] DialogFragment - retaining listener after screen rotation
问题描述
我有它创建了一个DatePickerDialog一个DialogFragment。我使用了一个名为的newInstance
,以便使用默认的空构造函数设置的初始值的静态方法。但是,我怎么设置监听器?屏幕旋转后,在完成按钮点击时,听者不会做任何事情,因为它不存在。
公共类DatePickerFragment扩展DialogFragment {
公共静态最后弦乐ARG_YEAR =一年;
公共静态最后弦乐ARG_MONTH =月;
公共静态最后弦乐ARG_DAY =一天;
私人OnDateSetListener listener_;
公共静态DatePickerFragment的newInstance(OnDateSetListener监听器,INT年,月整型,INT日){
最后DatePickerFragment date_picker =新DatePickerFragment();
date_picker.setListener(听众);
最后的捆绑参数=新包();
arguments.putInt(ARG_YEAR,一年);
arguments.putInt(ARG_MONTH,月);
arguments.putInt(ARG_DAY,日);
date_picker.setArguments(参数);
返回date_picker;
}
私人无效使用setListener(OnDateSetListener监听器){
listener_ =侦听器;
}
@覆盖
公共对话onCreateDialog(包saved_instance_state){
最后的捆绑参数= getArguments();
最终诠释年= arguments.getInt(ARG_YEAR);
最终诠释一个月= arguments.getInt(ARG_MONTH);
最终诠释天= arguments.getInt(ARG_DAY);
返回新DatePickerDialog(getActivity(),listener_,年,月,日);
}
}
不过,我怎么设置监听器?
您更新了活动
的的onCreate
方法监听器参考:
私人OnDateSetListener MODS =新OnDateSetListener(){
@覆盖
公共无效onDateSet(DatePicker的观点,年整型,诠释monthOfYear,
INT DAYOFMONTH){
//做重要的东西
}
};
和的onCreate
方法:
如果(savedInstanceState!= NULL){
DatePickerFragment DPF =(DatePickerFragment)getSupportFragmentManager()
.findFragmentByTag(theTag?);
如果(DPF!= NULL){
dpf.setListener(MODS);
}
}
I have a DialogFragment which creates a DatePickerDialog. I'm using a static method called newInstance
to set the initial values in order to use the default empty constructor. However, how am I supposed to set the listener? After the screen rotation, when clicking in the "Done" button, the listener doesn't do anything since it does not exist.
public class DatePickerFragment extends DialogFragment {
public static final String ARG_YEAR = "year";
public static final String ARG_MONTH = "month";
public static final String ARG_DAY = "day";
private OnDateSetListener listener_;
public static DatePickerFragment newInstance(OnDateSetListener listener, int year, int month, int day) {
final DatePickerFragment date_picker = new DatePickerFragment();
date_picker.setListener(listener);
final Bundle arguments = new Bundle();
arguments.putInt(ARG_YEAR, year);
arguments.putInt(ARG_MONTH, month);
arguments.putInt(ARG_DAY, day);
date_picker.setArguments(arguments);
return date_picker;
}
private void setListener(OnDateSetListener listener) {
listener_ = listener;
}
@Override
public Dialog onCreateDialog(Bundle saved_instance_state) {
final Bundle arguments = getArguments();
final int year = arguments.getInt(ARG_YEAR);
final int month = arguments.getInt(ARG_MONTH);
final int day = arguments.getInt(ARG_DAY);
return new DatePickerDialog(getActivity(), listener_, year, month, day);
}
}
However, how am I supposed to set the listener?
You update the listener reference in the onCreate
method of the Activity
:
private OnDateSetListener mOds = new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// do important stuff
}
};
and in the onCreate
method:
if (savedInstanceState != null) {
DatePickerFragment dpf = (DatePickerFragment) getSupportFragmentManager()
.findFragmentByTag("theTag?");
if (dpf != null) {
dpf.setListener(mOds);
}
}
这篇关于DialogFragment - 屏幕旋转之后保持监听器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!