DialogFragment - 屏幕旋转之后保持监听器 [英] DialogFragment - retaining listener after screen rotation

查看:304
本文介绍了DialogFragment - 屏幕旋转之后保持监听器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有它创建了一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆