2012-02-20 8 views
-3

このコードは非常にうまく機能していますが、RadioButtonと非常によく似たものを作成する必要があります。私は何を変えなければならないでしょうか?Android:ArrayAdapter with RadioButton

public class InteractiveArrayAdapter extends ArrayAdapter<Model> { 

    private final List<Model> list; 
    private final Activity context; 

    public InteractiveArrayAdapter(Activity context, List<Model> list) { 
     super(context, R.layout.rowbuttonlayout, list); 
     this.context = context; 
     this.list = list; 
    } 

    static class ViewHolder { 
     protected TextView text; 
     protected CheckBox checkbox; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = null; 
     if (convertView == null) { 
      LayoutInflater inflator = context.getLayoutInflater(); 
      view = inflator.inflate(R.layout.rowbuttonlayout, null); 
      final ViewHolder viewHolder = new ViewHolder(); 
      viewHolder.text = (TextView) view.findViewById(R.id.label); 
      viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check); 
      viewHolder.checkbox 
        .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

         @Override 
         public void onCheckedChanged(CompoundButton buttonView, 
           boolean isChecked) { 
          Model element = (Model) viewHolder.checkbox 
            .getTag(); 
          element.setSelected(buttonView.isChecked()); 

         } 
        }); 
      view.setTag(viewHolder); 
      viewHolder.checkbox.setTag(list.get(position)); 
     } else { 
      view = convertView; 
      ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position)); 
     } 
     ViewHolder holder = (ViewHolder) view.getTag(); 
     holder.text.setText(list.get(position).getName()); 
     holder.checkbox.setChecked(list.get(position).isSelected()); 
     return view; 
    } 
} 



    public class Model { 

    private String name; 
    private boolean selected; 

    public Model(String name) { 
     this.name = name; 
     selected = false; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public boolean isSelected() { 
     return selected; 
    } 

    public void setSelected(boolean selected) { 
     this.selected = selected; 
    } 

} 

"rowbuttonlayout.xml"

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

    <TextView 
     android:id="@+id/label" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@+id/label" 
     android:textSize="30px" > 
    </TextView> 

    <CheckBox 
     android:id="@+id/check" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_marginLeft="4px" 
     android:layout_marginRight="10px" > 
    </CheckBox> 

</RelativeLayout> 

このコードはすべてwebsiteです。

私はあなたがこの中に必要なすべての情報が既に質問に答え見つけることだと思う

答えて

1

listview with radio group error

@Danteの受け入れ答えは、あなたがラジオボタンを使用するカスタムアレイアダプタを書き換えるために必要なすべてのコードが含まれています。

EDIT

あなたのコメントによると、私はあなたが本当にカスタム・アダプタ、ビューホルダーとオブジェクトとカスタムリストを作成する方法を知っていることを確認していません。

ロマン・ガイは、ここでは詳細に

http://www.google.com/events/io/2010/sessions/world-of-listview-android.html

をリストビューを説明し、あなたは、単にあなたのリストがチェック可能実装して持っている必要がありますヘンデルcustomadapter viewholderなどすると、関連するPDF

http://dl.google.com/googleio/2010/android-world-of-listview-android.pdf

。例えばとしてここに

How to use RadioGroup in ListView custom adapter?

あなたはここでカスタムリストビューを設定する方法がわからない場合の例であるが、それはあなたの質問に直接関係はありません。

// The Adapter 
class myObjectAdapter extends ArrayAdapter<myObject> { 
    myObjectAdapter() { 
     super(MyActivity.this, R.layout.my_row_layout, 
       listItems); 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     myObjectHolder holder = null; 
     if (convertView == null) { 
      LayoutInflater inflater = getLayoutInflater(); 
      convertView = inflater.inflate(R.layout.my_row_layout, 
        parent, false); 
      holder = new myObjectHolder(convertView); 
      convertView.setTag(holder); 
     } else { 
      holder = (myObjectHolder) convertView.getTag(); 
     } 
     holder.populateFrom(listItems.get(position)); 
     return (convertView); 
    } 
} 

// The Holder 
static class myObjectHolder { 
    private TextView myText = null;   

    myObjectHolder(View row) { 
     myText = (TextView) row.findViewById(R.id.MyTextView);    
    } 

    void populateFrom(myObject r) { 
     myText.setText(r.getText());    
    } 
} 

// The Object 
class myObject {   
    public final String myText;   

    public myObject(String myText) {    
     this.myText = myText;    
    } 

    public String getText() { 
     return myText; 
    }     
} 

あなたが持っていると仮定MyTextViewというテキストビューを含むmy_row_layoutというxmlファイル。あなたの場合、あなたはラジオボタンでテキストビューを置き換え、上で与えられたリンクに従ってチェックすると、それは動作します。

希望する

+0

ダンテの解決策に問題があります。彼は正確に5つのRadioButtonを作成します!私はその番号を知らないので、同じRadioButtonをダイナミックに作成する必要があります。どのようにできるのか? – michoprogrammer

+0

私は質問を理解し始めます。 – michoprogrammer

+0

http://stackoverflow.com/questions/7329856/how-to-use-radiogroup-in-listview-custom-adapter < - この投稿は役に立たない。 あなたの例は非常に便利で、このhttp://www.google.com/events/io/2010/sessions/world-of-listview-android.htmlは質問を理解するのに役立ちます。 ラジオボタンで同じことを作りましたが、多くのボタンにチェックできるのはなぜなのでしょうか...私はラジオグループを設定していないのですが、私はどこに設定することができます知っている! 初心者の質問には申し訳ありませんが、2週間からアンドロイドのみを使用しています... – michoprogrammer

関連する問題