PickerView控件在Fragment中的正確使用

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();
}

//監(jiān)聽點擊事件后調(diào)用show方法   
//不要以為是我 show 的時候 mTiePic 為 null 所以才 show 不了,告訴你我測過了不是的
mTimePic.show();

二.問題點

1.Fragment之間的切換是去替換,不是每一次切換都走onCreat()方法,所以要監(jiān)聽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();


        //監(jiān)聽點擊事件后調(diào)用show方法   
        //不要以為是我 show 的時候 mTiePic 為 null 所以才 show 不了,告訴你我測過了不是的
        mTimePic.show();
}

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

正確的演示

正確演示

ps:也許現(xiàn)在你用不到他,但你看了一遍后心里有個印象,萬一以后遇到了問題就可以來看看,減少不少的開發(fā)時間,這個問題讓我頭疼了一下午,一直以為是自己代碼的問題畢竟我第一次用PickerView控件.要是不知道控件的基本使用方法也可以@我,很樂意與你交流.(整理花了2個小時間才能以如此簡介的方式呈現(xiàn)給您不求關注,只喜歡點個喜歡)

你的喜歡與關注是持續(xù)創(chuàng)作的動力

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容