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()
方法,所以要监听fragment
的onResume()
方法.在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个小时间才能以如此简介的方式呈现给您不求关注,只喜欢点个喜欢)