PickerView控件在Fragment中的正确使用

2018-10-29  本文已影响0人  柏林billy

PickerView控件在Fragment中的正确使用

我在fragment使用PickerView遇到的bug

bug演示
可以看到在fragment中使用时,第一次可以正常显示pickerView控件,在退出App后再次进入时却怎么点击时间都无法显示.ps刚开始以为是自己代码问题研究了好久
之后再在activity中使用同样的代码却没有任何问题,使用完全正常.

what the F**k!!!

image

一.错误的代码

/**
 * 初始化时间选择器
 */
private void initTimePicker() {//Dialog 模式下,在底部弹出
    mTimePic = new TimePickerBuilder(mContext, new OnTimeSelectListener() {
        @Override
        public void onTimeSelect(Date date, View v) {
            Toast.makeText(mContext, getTime(date), Toast.LENGTH_SHORT).show();
        }
    }).build();
}

//监听点击事件后调用show方法   
//不要以为是我 show 的时候 mTiePic 为 null 所以才 show 不了,告诉你我测过了不是的
mTimePic.show();

二.问题点

1.Fragment之间的切换是去替换,不是每一次切换都走onCreat()方法,所以要监听fragmentonResume()方法.在onResume()中去初始化时间选择器.

2.不要使用mContext,他源代码中用的MainActivity.this,所以应该使用getActivity().他要的是界面(Activity)不是上下文(Context)

三.我走过的弯路及坑就不展示了,直接上正确代码

 /**
 * 初始化时间选择器
 */
private void initTimePicker() {//Dialog 模式下,在底部弹出
        mTimePic = new TimePickerBuilder(getActivity(), new OnTimeSelectListener() {
            @Override
            public void onTimeSelect(Date date, View v) {
                Toast.makeText(getActivity(), getTime(date), Toast.LENGTH_SHORT).show();
            }
        }).build();


        //监听点击事件后调用show方法   
        //不要以为是我 show 的时候 mTiePic 为 null 所以才 show 不了,告诉你我测过了不是的
        mTimePic.show();
}

@Override
public void onResume() {
    super.onResume();
    initTimePicker();
}

正确的演示

正确演示
ps:也许现在你用不到他,但你看了一遍后心里有个印象,万一以后遇到了问题就可以来看看,减少不少的开发时间,这个问题让我头疼了一下午,一直以为是自己代码的问题毕竟我第一次用PickerView控件.要是不知道控件的基本使用方法也可以@我,很乐意与你交流.(整理花了2个小时间才能以如此简介的方式呈现给您不求关注,只喜欢点个喜欢)

你的喜欢与关注是持续创作的动力

上一篇下一篇

猜你喜欢

热点阅读