RadioButton實現選擇後可取消選擇

      Radiobutton是一種單選按鈕,是由於RadioGroup管理下的一組按鈕,所以一旦其中的一個button選中,再點擊,就不能取消,想要取消調用Radiobutton的setchecked(boolean isChecked)的方法。

      在網上找了許多法,發現都實現不了在RadioGroup中選中Radiobutton後再次點擊取消選中,於是自己查找資料後,最終得到了方法,和大家做個分享。

   先看下結果展示

    

     本例子展示了2種方式來實現,

 一:第一種實現方式

一種是單個 Radiobutton進行逐個設置setOnClickListener方法,通過setChecked

改變選中和取消的狀態,這種的問題在於如果有多個Radiobutton,相對而言就非常的耗時。不過我們可以先來看看它的具體實現。    

        mRadioBtDhhs.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setHcfs1(v, DHHS);
            }
        });

        mRadioBtJmhs.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setHcfs1(v, JMHS);
            }
        });

        mRadioBtZppd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setHcfs1(v, ZPPD);
            }
        });

setHcfs1方法:

    private void setHcfs1(View view, String hcfs) {
        if (hcfs.equals(mHsfs1)) {
            ((RadioButton) view).setChecked(false);
            mHsfs1 = "";
        } else {
            mHsfs1 = hcfs;
            ((RadioButton) view).setChecked(true);
        }
    }

其中的mHsfs1參數是用來記錄每次選中的值。

二:第二種實現方式

  第二種採用的是RadioGroup.getChildAt(i)的方式設置所有Radiobutton的setOnClickListener方法。這樣比較靈活,不管是有多少Radiobutton,也不需要額外的操作。

具體實現如下:

    for (int i = 0; i < mRgHstj.getChildCount(); i++) {
            mRgHstj.getChildAt(i).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    switch (v.getId()) {
                        // 電話覈實
                        case R.id.radioBt_dhhs:
                            setHcfs(v, DHHS);
                            break;
                        //  見面覈實
                        case R.id.radioBt_jmhs:
                            setHcfs(v, JMHS);
                            break;
                        //      照片判斷
                        case R.id.radioBt_zppd:
                            setHcfs(v, ZPPD);
                            break;
                    }
                }
            });
        }
其中mRgHstj是RadioGroup。

setHcfs方法的實現:
   private void setHcfs(View view, String hcfs) {
        if (hcfs.equals(mHsfs)) {
            mRgHstj.clearCheck();
            mHsfs = "";
        } else {
            mHsfs = hcfs;
            mRgHstj.check(view.getId());
        }

    }

這裏用到了RadioGroup.clearCheck()方法,通過取消所有RadioButton的選中狀態達到取消選擇的效果。爲什麼這邊的實現不採用mHsfs1這個方法呢。經過測試得知在RadioGroup進行循環設置時 RadioButton.setChecked這個方法起不到改變選中狀態的效果。採用RadioGroup..check(view.getId())方法進行這種選中。

 

到此就ok了,基本的核心代碼都已經給出來了,如果願意下載的,具體的代碼可以看demo

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章