2012-03-30 2 views
3

私はアンドロイドアプリで機器の検査フォームを複製しています。グループデータはマシンの異なるシステムで構成され、子データにはアイテムのチェックリストが含まれ、技術者がアイテムの合格/不合格のステータスを示すためのRadioGroupを含むExpandableListViewがあります。 1つの子でRadioButtonの値を選択する場合を除いて、他のグループの同じRadioButtonの値が選択されます。私が持っていたのであれば:ExpandableListView with RadioButtons 1つのラジオグループの値を選択し、グループが展開されるといくつかの詳細が選択されます

Group 1 
    Question 1 
    Passed 
    Failed 
    Corrected 
    NA 
    Question 2 
    Passed 
    Failed 
    Corrected 
    NA 
Group 2 
    Question 1 
    Passed 
    Failed 
    Corrected 
    NA 
    Question 2 
    Passed 
    Failed 
    Corrected 
    NA 

を私が選択した場合は拡張したとき、1またはRadioGroupsの両方も選択が合格していますが、これまでグループ2に行ったことなくて、グループ1の両方の質問に渡されました。

私はRADIOGROUPと子グループを作成するために使用していレイアウトが

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:layout_marginLeft="15dip"> 
<TextView 
android:id="@+id/questionText" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"/> 
<RadioGroup 
android:tag="actionGroup" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical"> 
<RadioButton 
    android:tag="passed" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Passed"/> 
<RadioButton 
    android:tag="failed" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Failed"/> 
<RadioButton 
    android:tag="corrected" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Corrected"/> 
<RadioButton 
    android:tag="na" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="NA"/> 
</RadioGroup> 
</LinearLayout> 

BaseExpandableListAdapter

のインスタンス
ExpandableListView inspectionQuestions = (ExpandableListView) FindViewById(Android.Resource.Id.List); 
inspectionQuestions.SetAdapter(new ExpAdapter(this)); 

のように見えますBaseExpandableListAdapter

public class ExpAdapter : BaseExpandableListAdapter 
{ 
    private readonly Context context; 
    Questions questions = new Questions(); 
    private int seed = 1000; 

    public ExpAdapter(Context ctx) 
    { 
     context = ctx; 
    } 

    public override Object GetChild(int groupPosition, int childPosition) 
    { 
     return null; 
    } 

    public override long GetChildId(int groupPosition, int childPosition) 
    { 
     return 0; 
    } 

    public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent) 
    { 
     if (convertView == null) 
     { 
      LayoutInflater inflater = (LayoutInflater) context.GetSystemService(Context.LayoutInflaterService); 
      convertView = inflater.Inflate(Resource.Layout.inspection_row_2, null); 
     } 

     int currentID; 

     TextView question = (TextView) convertView.FindViewById(Resource.Id.questionText); 
     RadioGroup radio = (RadioGroup) convertView.FindViewWithTag("actionGroup"); 
     radio.Id = seed++; 
     RadioButton pass = (RadioButton) convertView.FindViewWithTag("passed"); 
     pass.Id = seed++; 
     RadioButton fail = (RadioButton) convertView.FindViewWithTag("failed"); 
     fail.Id = seed++; 
     RadioButton correct = (RadioButton)convertView.FindViewWithTag("corrected"); 
     correct.Id = seed++; 
     RadioButton na = (RadioButton)convertView.FindViewWithTag("na"); 
     na.Id = seed++; 

     string[][] items = questions.childItems(); 
     question.Text = items[groupPosition][childPosition]; 

     return convertView; 
    } 

    public override int GetChildrenCount(int groupPosition) 
    { 
     return questions.childItems()[groupPosition].Length; 
    } 

    public override Object GetGroup(int groupPosition) 
    { 
     return null; 
    } 

    public override long GetGroupId(int groupPosition) 
    { 
     return 0; 
    } 

    public override View GetGroupView(int groupPosition, bool isExpanded, View convertView, ViewGroup parent) 
    { 
     if (convertView == null) 
     { 
      LayoutInflater inflater = (LayoutInflater) context.GetSystemService(Context.LayoutInflaterService); 
      convertView = inflater.Inflate(Android.Resource.Layout.SimpleExpandableListItem1, null); 
     } 

     TextView groupName = (TextView) convertView.FindViewById(Android.Resource.Id.Text1); 

     QuestionGrouper grouper = new QuestionGrouper(); 
     groupName.Text = grouper.groupItems()[groupPosition]; 

     return convertView; 
    } 

    public override bool IsChildSelectable(int groupPosition, int childPosition) 
    { 
     return true; 
    } 

    public override int GroupCount 
    { 
     get { return 9; } 
    } 

    public override bool HasStableIds 
    { 
     get { return false; } 
    } 
} 

提案あたりEDITED GetChildView:

public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent) 
    { 
     if (convertView == null) 
     { 
      LayoutInflater inflater = (LayoutInflater) context.GetSystemService(Context.LayoutInflaterService); 
      convertView = inflater.Inflate(Resource.Layout.inspection_row_2, null); 
     } 

     TextView question = (TextView) convertView.FindViewById(Resource.Id.questionText); 

     RadioGroup radio = (RadioGroup) convertView.FindViewById(Resource.Id.activityGroup); 
     int count = radio.ChildCount; 

     if (count == 4) 
     { 
      return convertView; 
     } 

     RadioButton pass = new RadioButton(context) {Text = "Passed"}; 
     RadioButton fail = new RadioButton(context) {Text = "Failed"}; 
     RadioButton correct = new RadioButton(context) {Text = "Corrected"}; 
     RadioButton na = new RadioButton(context) {Text = "NA"}; 

     radio.AddView(pass); 
     radio.AddView(fail); 
     radio.AddView(correct); 
     radio.AddView(na); 

     string[][] items = questions.childItems(); 
     question.Text = items[groupPosition][childPosition]; 

     return convertView; 
    } 

答えて

0

各ラジオボタンで使用している@ + idはグループごとに異なるのですか?それが頭に浮かぶ最初のことです。たとえ彼らが別のRadioGroupにいるとしても、findViewByIdを正しく実行できるように、独自のIDを持つ必要があると私は確信しています。

+0

私はExpandableListAdapterのグループ2のレイアウトとして上記のレイアウトを割り当てているだけなので、私はそれを行う方法がわかりません。各RadioButtonにどのように新しいIDを割り当てるのですか? – jmease

+0

私はSimpleExpandableListAdapterであまり働いていません。だから私はあまりにも肯定的ではない。残りのレイアウトxmlを投稿できますか?私はあなたがそこにいるものがどのようにグループごとに2つの質問に翻訳されるのか、本当にわかりません。 – Brayden

+0

それはレイアウト全体です。 SimpleExpandableListAdaptersはグループ化データを取得し、最初に提供したレイアウト(Android.Resource.Layout.SimpleExpandableListItem1)を適用してから、子データのグループ化を行い、上記のレイアウトである2番目のレイアウトを適用します。 – jmease

0

あなたは確かにその後、ちょうどキーとのRadioButtonオブジェクトとして子位置(いくつかのキーと値のペアのすべての

子どもたちを守る...実行時にそれを追加してみてください。.. XMLから子供のラジオグループを追加should'tあなたはすべてのRadioButtonへの参照を持っているので)...今、あなたは

一意性を必要としない..私は同じ問題を持っていたし、私はこれをしなかった、今それ

は素晴らしい作品...それはあなたのため、これらを処理するために容易になります常にchildPositionを取得する

ExpandableListViewにアクセスしやすくなります。

+0

多分いくつかのコードを提供できますか? xmlではなくGetChildViewでRadioButtonを追加すると、私は追加する4つの質問よりもそれぞれの質問の下にたくさんのRadioButtonを取得します。 – jmease

+0

上記のGetChildViewを参照してください。それでも同じ問題があります。 – jmease

0

各項目についてListViewとInflateビューを使用します。 このリンクを参照してください:RadioGroup in ListView

関連する問題