2016-01-21 25 views
0

我需要爲多項選擇問題創建一個UI。例如在屏幕上會有10個問題,每個問題有4個選項。 對於給定的問題,用戶只能從可用的4選項中僅選擇一個選項。在單獨的TableRow中使用Radiogroup for RadioButton

問題是因爲我已經使用TableRow爲每個選項。我在4個表格行中有4個RadioButton。現在我不知道如何使用RadioGroup,因此...可以選擇只有一個選項用於給定問題的可用4選項。

下面

是示例代碼:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="match_parent" 
    android:layout_marginTop="?attr/actionBarSize" 
    android:orientation="vertical" 
    android:paddingLeft="20dp" 
    android:paddingRight="20dp" 
    android:paddingTop="20dp"> 

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

     <TextView 
      style="@style/rpTvQue" 
      android:text="@string/rp_q1" /> 

     <TableLayout 
      android:layout_width="match_parent" 
      android:weightSum="10" 
      android:layout_height="match_parent"> 

      <RadioGroup> 


      <TableRow> 
       <RadioButton 
        android:layout_weight="1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"/> 
       <TextView 
        style="@style/rpTvTblLabelAlt" 
        android:text="@string/rp_q1a" /> 
      </TableRow> 
      <TableRow> 
       <RadioButton 
        android:layout_weight="1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"/> 
       <TextView 
        style="@style/rpTvTblLabelAlt" 
        android:text="@string/rp_q1a" /> 
      </TableRow> 
      </RadioGroup> 
     </TableLayout> 


    </LinearLayout> 


</LinearLayout> 

屏幕截圖:enter image description here 風格:rpTvQue

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="rpTvQue" parent="@android:style/TextAppearance"> 
     <item name="android:layout_width">match_parent</item> 
     <item name="android:layout_height">wrap_content</item> 
    </style> 
</resources> 

風格:rpTvQue

<resources> 
    <style name="rpTvTblLabelAlt" parent="@android:style/TextAppearance"> 
     <item name="android:layout_weight">9</item> 
     <item name="android:layout_width">wrap_content</item> 
     <item name="android:layout_height">wrap_content</item> 
     <item name="android:paddingLeft">3dp</item> 
     <item name="android:paddingRight">3dp</item> 
     <item name="android:layout_gravity">fill</item> 
    </style> 
</resources> 

回答

1

走向更使關閉的什麼@ AkiAki007說你應該使用RadioGroup中和單選按鈕裏面,沒有一個TableLayout

一個辦法這樣做,不使用適配器:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:padding="16dp" 
    android:layout_height="match_parent"> 

    <!-- Question One Layout --> 
    <LinearLayout 
     android:id="@+id/question_one_layout" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <TextView 
      android:id="@+id/textViewQuestion" 
      android:text="What you would like to ask for Question one?" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

     <RadioGroup 
      android:id="@+id/radio_group_one" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 

      <RadioButton 
       android:id="@+id/radio_button_one_group_one" 
       android:text="Answer One" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 

      <RadioButton 
       android:id="@+id/radio_button_two_group_one" 
       android:text="Answer Two" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 

      <RadioButton 
       android:id="@+id/radio_button_three_group_one" 
       android:text="Answer Three" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 

      <RadioButton 
       android:id="@+id/radio_button_four_group_one" 
       android:text="Answer Four" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 

     </RadioGroup> 
    </LinearLayout> 

    <!-- Question One Layout --> 
    <LinearLayout 
     android:id="@+id/question_two_layout" 
     android:layout_below="@+id/question_one_layout" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <TextView 
      android:id="@+id/textViewQuestionTwo" 
      android:text="What you would like to ask for Question two?" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

     <RadioGroup 
      android:id="@+id/radio_group_two" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

      <RadioButton 
       android:id="@+id/radio_button_one_group_two" 
       android:text="Answer One" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 

      <RadioButton 
       android:id="@+id/radio_button_two_group_two" 
       android:text="Answer Two" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 

      <RadioButton 
       android:id="@+id/radio_button_three_group_two" 
       android:text="Answer Three" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 

      <RadioButton 
       android:id="@+id/radio_button_four_group_two" 
       android:text="Answer Four" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 

     </RadioGroup> 
    </LinearLayout> 

    <!-- ... And So on for all your questions --> 

</RelativeLayout> 

推薦更多方法是使用一個適配器,通過它您的問題清單:

import android.content.Context; 
import android.os.Parcel; 
import android.os.Parcelable; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.RadioButton; 
import android.widget.TextView; 

import com.ticketmaster.ticketjoy.R; 

import java.util.List; 

/** 
* Created on 1/21/16. 
*/ 
public class QuestionAdapter extends BaseAdapter { 

    private Context context; 
    private List<Question> questions; 


    static class Holder{ 
     TextView tvQuestion; 
     RadioButton mRbAnswerOne; 
     RadioButton mRbAnswerTwo; 
     RadioButton mRbAnswerThree; 
     RadioButton mRbAnswerFour; 
    } 

    public QuestionAdapter(Context context, List<Question> questions){ 
     this.context = context; 
     this.questions = questions; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     Holder holder; 

     if(convertView == null){ 
      holder = new Holder(); 

      View view = LayoutInflater.from(context).inflate(R.layout.demo_item, parent, false); 

      holder.tvQuestion = (TextView) view.findViewById(R.id.textViewQuestion); 
      holder.mRbAnswerOne = (RadioButton) view.findViewById(R.id.radio_button_one); 
      holder.mRbAnswerTwo = (RadioButton) view.findViewById(R.id.radio_button_two); 
      holder.mRbAnswerThree = (RadioButton) view.findViewById(R.id.radio_button_three); 
      holder.mRbAnswerFour = (RadioButton) view.findViewById(R.id.radio_button_four); 

      convertView.setTag(holder); 

     }else{ 
      holder = (Holder) convertView.getTag(); 
     } 

     /* 
      Set the fields for the question and asnwers 
     */ 
     final Question question = questions.get(position); 

     holder.tvQuestion.setText(question.question); 
     holder.mRbAnswerOne.setText(question.answerOne); 
     holder.mRbAnswerTwo.setText(question.answerTwo); 
     holder.mRbAnswerThree.setText(question.answerThree); 
     holder.mRbAnswerFour.setText(question.answerFour); 

     return convertView; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public Object getItem(int position) { 
     return questions.get(position); 
    } 

    @Override 
    public int getCount() { 
     return questions.size(); 
    } 

    public class Question implements Parcelable{ 

     public String question; 
     public String answerOne; 
     public String answerTwo; 
     public String answerThree; 
     public String answerFour; 

     public Question(){ 

     } 

     public Question(Parcel source){ 
      question = source.readString(); 
      answerOne = source.readString(); 
      answerTwo = source.readString(); 
      answerThree = source.readString(); 
      answerFour = source.readString(); 
     } 

     @Override 
     public int describeContents() { 
      return 0; 
     } 

     @Override 
     public void writeToParcel(Parcel dest, int flags) { 
       // ... Update don't forget to add them to Parcel 
       dest.writeString(question); 
       dest.writeString(answerOne); 
       dest.writeString(answerTwo); 
       dest.writeString(answerThree); 
       dest.writeString(answerFour); 
     } 

     /** 
     * Creator for instantiating the a new Question or array of Questions from a Parcel 
     */ 
     public final Parcelable.Creator<Question> CREATOR = new Parcelable.Creator<Question>(){ 
      @Override 
      public Question createFromParcel(Parcel source) { 
       return new Question(source); 
      } 

      @Override 
      public Question[] newArray(int size) { 
       return new Question[size]; 
      } 
     }; 
    } 
} 

的使用佈局:

<?xml version="1.0" encoding="utf-8"?> 
<!-- Question One Layout --> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/question_one_layout" 
    android:padding="16dp" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <TextView 
     android:id="@+id/textViewQuestion" 
     android:text="What you would like to ask for Question one?" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <RadioGroup 
     android:id="@+id/radio_group" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <RadioButton 
      android:id="@+id/radio_button_one" 
      android:text="Answer One" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

     <RadioButton 
      android:id="@+id/radio_button_two" 
      android:text="Answer Two" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

     <RadioButton 
      android:id="@+id/radio_button_three" 
      android:text="Answer Three" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

     <RadioButton 
      android:id="@+id/radio_button_four" 
      android:text="Answer Four" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

    </RadioGroup> 
</LinearLayout> 
1

RadioGroup是一個LinearLayout,所以你可以爲它指定垂直佈局,這樣你就不需要使用TableLayout和TableRow。此外,RadioButton是一個Button,它是一個TextView,並具有文本屬性,可用於文本顯示的重力和對齊方式,而不像其他TextView那樣。

+0

非常感謝。我因此學習了很少的東西。我希望我可以接受多個答案。 –

0

您可以在每個TableRow中使用帶有4個RadioButton的單個RadiGroup。

相關問題