Android 功能篇之 多行Item 解決單選問題

前提:

如下圖所示,這是一個導航選擇彈框。進行單項選擇,然後會監聽回調選擇的事件。問題是Android的RadioButton是一般是放在RadioGroup中進行管理的,而RadioGroup又是線性佈局,即單行有效,多行無效。如圖那種就需要兩個RadioGroup來進行合作。那麼如果進行合作呢?

效果如下

在這裏插入圖片描述

分析:

RadioGroup多行顯示其實就是兩個RadioGroup進行切換,使用RadioGroup的clearCheck()方法進行操作。

但是在使用clearCheck()之前,如果RadioGroup已經設置過監聽,執行就會報錯誤。

正確方法如下:

先調用

setOnCheckedChangeListener(null)

再調用

clearCheck()然後重新setOnCheckedChangeListener(checkedListener)

代碼

1、佈局如下:

        <RadioButton
            android:background="@drawable/pop_start_lv_report_bg"
            android:id="@+id/user_report_rb_illegal"
            android:layout_weight="1"
            android:layout_width="@dimen/dp_110"
            android:layout_height="@dimen/dp_35"
            android:gravity="center"
            android:button="@null"
            android:drawablePadding="@dimen/dp_10"
            android:text="違法違禁"
            android:textColor="@color/white"
            android:textSize="@dimen/sp_13"
            tools:ignore="HardcodedText" />

        <RadioButton
            android:layout_weight="1"
            android:background="@drawable/pop_start_lv_report_bg"
            android:id="@+id/user_report_rb_obscene_porn"
            android:layout_width="@dimen/dp_110"
            android:layout_height="@dimen/dp_35"
            android:layout_marginStart="@dimen/dp_8"
            android:button="@null"
            android:gravity="center"
            android:text="淫穢色情"
            android:textColor="@color/white"
            android:textSize="@dimen/sp_13"
            tools:ignore="HardcodedText" />

        <RadioButton
            android:layout_weight="1"
            android:background="@drawable/pop_start_lv_report_bg"
            android:id="@+id/user_report_rb_behavior"
            android:layout_width="@dimen/dp_110"
            android:layout_height="@dimen/dp_35"
            android:layout_marginStart="@dimen/dp_8"
            android:button="@null"
            android:gravity="center"
            android:text="危險行爲"
            android:textColor="@color/white"
            android:textSize="@dimen/sp_13"
            tools:ignore="HardcodedText"/>
    </RadioGroup>
    <RadioGroup
        android:id="@+id/user_report_rg_manhole_state_two"
        android:layout_marginEnd="@dimen/dp_15"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/dp_15"
        android:layout_marginTop="@dimen/dp_8"
        android:orientation="horizontal">

        <RadioButton
            android:layout_weight="1"
            android:background="@drawable/pop_start_lv_report_bg"
            android:id="@+id/user_report_rb_fraud"
            android:layout_width="@dimen/dp_110"
            android:layout_height="@dimen/dp_35"
            android:button="@null"
            android:gravity="center"
            android:text="廣告詐騙"
            android:textColor="@color/white"
            android:textSize="@dimen/sp_13"
            tools:ignore="HardcodedText" />

        <RadioButton
            android:layout_weight="1"
            android:background="@drawable/pop_start_lv_report_bg"
            android:id="@+id/user_report_rb_insult"
            android:layout_width="@dimen/dp_110"
            android:layout_height="@dimen/dp_35"
            android:layout_marginStart="@dimen/dp_8"
            android:button="@null"
            android:gravity="center"
            android:text="侮辱謾罵"
            android:textColor="@color/white"
            android:textSize="@dimen/sp_13"
            tools:ignore="HardcodedText"/>

        <RadioButton
            android:layout_weight="1"
            android:background="@drawable/pop_start_lv_report_bg"
            android:id="@+id/user_report_rb_other"
            android:layout_width="@dimen/dp_110"
            android:layout_height="@dimen/dp_35"
            android:layout_marginStart="@dimen/dp_8"
            android:button="@null"
            android:gravity="center"
            android:text="其他"
            android:textColor="@color/white"
            android:textSize="@dimen/sp_13"
            tools:ignore="HardcodedText" />
    </RadioGroup>

2、具體操作如下:

控件調用:

@InjectView(R.id.user_report_rg_manhole_state_one)
RadioGroup rgManholeStateOne;
@InjectView(R.id.user_report_rg_manhole_state_two)
RadioGroup rgManholeStateTwo;

設置監聽:

   rgManholeStateOne.setOnCheckedChangeListener(new OnMyManholeStateOneCheckedChangeListener());
    rgManholeStateTwo.setOnCheckedChangeListener(new OnMyManholeStateTwoCheckedChangeListener());

實現單選

private class OnMyManholeStateOneCheckedChangeListener implements RadioGroup.OnCheckedChangeListener {

    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int position) {
        switch (position) {
            case R.id.rb_intact:
                if (rbIntact.isChecked())
                    rgManholeStateTwo.clearCheck();
                break;
            case R.id.rb_lose:
                if (rbLose.isChecked())
                    rgManholeStateTwo.clearCheck();
                break;
            case R.id.rb_sunken:
                if (rbSunken.isChecked())
                    rgManholeStateTwo.clearCheck();
                break;
        }
    }
}

private class OnMyManholeStateTwoCheckedChangeListener implements RadioGroup.OnCheckedChangeListener {

    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int position) {

        switch (position) {
            case R.id.rb_occupation:
                if (rbOccupation.isChecked())
                    rgManholeStateOne.clearCheck();
                break;
            case R.id.rb_damage:
                if (rbDamage.isChecked())
                    rgManholeStateOne.clearCheck();
                break;
            case R.id.rb_heave:
                if (rbHeave.isChecked())
                    rgManholeStateOne.clearCheck();
                break;
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章