如何在自定义适配器中以编程方式使RadioButton不膨胀?

时间:2013-03-26 17:36:32

标签: android custom-adapter

所有

我有一个自定义适配器,用于将测验问题/答案膨胀到ListView中。每个问题(ListView中的单个项目)都有可变数量的答案,(但最大答案数(5)是静态的)。

除了使用回答字符串填充每个RadioButton的文本(使用setText)之外,我还想使用我的自定义适配器来评估RadioGroup中的所有RadioButtons是否都有与之关联的答案并相应地对其进行充气(或不充气)。理想情况下,我想以编程方式“取消膨胀”RadioButton或等效效果,因为我能够在自定义适配器中评估答案有效性。

我试过radioButton.setHeight(0)radioButton.setMaxHeight(0)但没有运气。

我从中拉出answerStrings的xml资源文件定义如下:

答案xml资源文件将所有答案字符串存储在单个字符串数组中,假设每个问题有5个答案用于索引目的。 有效答案由字符串数组中的非空项表示。没有有效的答案由空项目存根表示。

<string-array
    name="answer_array">

    <!-- question 1 answers -->
        <item>question 1 answer A</item>
        <item>question 1 answer B</item>
    <item>question 1 answer C</item>
    <item>question 1 answer D</item>
    <item>question 1 answer E</item>

    <!-- question 2 answers --> 
    <item>question 2 answer A</item>
    <item>question 2 answer B</item>
    <item></item>
    <item></item>
    <item></item>

<!-- question 3 answers -->
        <item>question 3 answer A</item>
    <item>question 3 answer B</item>
    <item>question 3 answer C</item>
    <item></item>
    <item></item>

</string-array>

我的测验布局文件如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:padding="4dip"
android:gravity="center_horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >

<LinearLayout
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:orientation="vertical" >

    <!-- quiz question -->
    <TextView
        android:id="@+id/question"  
        android:layout_gravity="left"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textStyle="bold"/> 

        <!--  answers for each question -->
        <RadioGroup 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:orientation="vertical"
            android:layout_marginTop="5dip"
            android:id="@+id/radiogroup">

                <RadioButton
                    android:id="@+id/A_button"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:onClick="doNothing"/> 

                <RadioButton
                    android:id="@+id/B_button"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:onClick="doNothing"/>   

                <RadioButton
                    android:id="@+id/C_button"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:onClick="doNothing"/> 

                <RadioButton
                    android:id="@+id/D_button"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:onClick="doNothing"/>   

                <RadioButton
                    android:id="@+id/E_button"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"            
                    android:onClick="doNothing"/>

        </RadioGroup>   

</LinearLayout>

</LinearLayout>

在我的自定义适配器中,我正在尝试执行以下操作;

private ViewHolder initRadioButtonText(ViewHolder holder, Custom quiz_row_data) {

    /* check if valid answer */
    int length = (quiz_row_data.getA_AnswerString()).length();

    if(length == 0) {
        holder.A_button.setHeight(0);
        //holder.A_button.setMaxHeight(0);
    }
    else
            holder.A_button.setText(quiz_row_data.getA_AnswerString());

    /* ..... etc etc for the other answer buttons ..... */

    return holder;
}

2 个答案:

答案 0 :(得分:1)

如果A_button是您不想显示的按钮,则只需使用

holder.A_button.setVisibility(RadioButton.GONE);

这将完全将其从layout移除,直到您致电

holder.A_button.setVisibility(RadioButton.VISIBLE);

如果您不担心删除它以为其他View腾出空间,请使用

holder.A_button.setVisibility(RadioButton.INVISIBLE);

答案 1 :(得分:0)

如果您真的想将按钮高度更改为零,那么正确的方法是使用LayoutParams

holder.A_button.setLayoutParams(new RadioGroup.LayoutParams(RadioGroup.LayoutParams.WRAP_CONTENT, 0));

否则,第二个解决方案是按照codeMagic显示的方式切换Visibility。