2013-03-26 66 views
0

全部,如何使RadioButton不以編程方式在自定義適配器中膨脹?

我有一個自定義適配器,用於將測驗問題/答案充入ListView。每個問題(ListView中的單個項目)具有可變數量的答案,(但是最大數量的答案(5)是靜態的)。

除了使用答案字符串填充每個RadioButton的文本(使用setText)之外,我還想使用自定義適配器來評估RadioGroup中的所有RadioButton是否都有與之相關的答案並相應地(或不) 。理想情況下,我想以編程方式「放棄」RadioButton或等效的效果,因爲我能夠評估自定義適配器中的答案有效性。我試過radioButton.setHeight(0)radioButton.setMaxHeight(0)沒有運氣。

XML資源文件我拉answerStrings從被定義爲這樣:在一個字符串數組,每題5個答案索引目的的假設

答案XML資源文件存儲所有的答案字符串。 有效答案由字符串數組中的非空項表示。沒有有效的答案是由一個空的項目存根表示的。

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

回答

1

如果A_button是你不想顯示該按鈕就用

holder.A_button.setVisibility(RadioButton.GONE); 

,直到調用

holder.A_button.setVisibility(RadioButton.VISIBLE); 

如果這將徹底從layout刪除不擔心將其移除以騰出空間供其他View s使用

holder.A_button.setVisibility(RadioButton.INVISIBLE); 
+0

這非常適合以編程方式從佈局中刪除特定按鈕。謝謝codeMagic。我也應該注意其他用戶看這個答案;每個按鈕的可見性需要明確設置,儘管獨立使用的問題,即:itemholder.D_button.setVisibility(RadioButton.VISIBLE)除了設置RadioButton文本 – 2013-03-26 18:29:01

+0

很高興我可以幫助!這就是爲什麼我的第二塊在那裏,但我想我可以更好地解釋它......好的音符! :) – codeMagic 2013-03-26 18:30:22

0

如果你真的想按鈕改變高度爲零,正確的方法是使用LayoutParams

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

否則,第二解決方案是切換能見度爲codeMagic顯示。

+0

感謝您的答案! – 2013-03-26 18:27:38

相關問題