radioGroup.check()執(zhí)行了多次OnCheckedChangeListener()

  • 問題:
    radioGroup.check(id)時,OnCheckedChangeListener被調(diào)用多次,2次3次都有
    -原因:
    radioGroup.check(id)的源碼如下
    public void check(@IdRes int id) {
        // don't even bother
        if (id != -1 && (id == mCheckedId)) {
            return;
        }

        if (mCheckedId != -1) {
            setCheckedStateForView(mCheckedId, false);
        }

        if (id != -1) {
            setCheckedStateForView(id, true);
        }

        setCheckedId(id);
    }

setCheckedStateForView(id, boolean)會調(diào)用setCheckedId(id)
setCheckedId(id);源碼如下

        if (mChecked != checked) {
            mCheckedFromResource = false;
            mChecked = checked;
            refreshDrawableState();
            notifyViewAccessibilityStateChangedIfNeeded(
                    AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED);

            // Avoid infinite recursions if setChecked() is called from a listener
            if (mBroadcasting) {
                return;
            }

            mBroadcasting = true;
            if (mOnCheckedChangeListener != null) {
                //-----------注意這里調(diào)用了監(jiān)聽-----------------
                mOnCheckedChangeListener.onCheckedChanged(this, mChecked);  
            }

可以看出,原選中的radioButton有值,會被調(diào)一次mOnCheckedChangeListener,新選中的也會調(diào)一次,最后又會調(diào)一次。
所以會出現(xiàn)調(diào)用2次或3次的情況。

  • 解決:
    方法1.將radioGroup.check() 替換成radioButton.setChecked(true)
    方法2. 自己維護(hù)一個mCheckId,若監(jiān)聽回調(diào)這個checkIdmCheckId一致則不處理。若checkIdview選中狀態(tài)為false也不處理。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,362評論 0 17
  • 1.finish Activity時軟鍵盤不關(guān):在onPause時用InputMethodManager的hide...
    步行者傳說閱讀 482評論 0 1
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,192評論 25 708
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,653評論 19 139
  • 先對曾經(jīng)點(diǎn)喜歡或者收藏這篇文章的朋友說聲抱歉,因部分原因個人決定在簡書停更并轉(zhuǎn)移駐扎到其他平臺。本想刪除賬號,可不...
    OCNYang閱讀 6,535評論 10 84

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