2012-02-20 97 views
-3

我发现这个代码工作得很好,我必须创建一些非常相似,但与RadioButton。我需要改变什么?Android:与RadioButton ArrayAdapter

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的接受的答案包括所有需要的代码重新编写使用单选按钮自定义阵列适配器。

编辑

根据您的意见,我不知道你真的知道如何编写使用自定义适配器,鉴于持有人及对象的自定义列表。

罗曼盖伊详细解释列表视图这里

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

和相关的PDF

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

一旦你亨德尔customadapter viewholder等你只需要有列表实现可检验的。作为例如这里

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

假设你有一个名为my_row_layout的xml文件,其中包含名为MyTextView的文本视图。在你的情况下,你会用单选按钮替换textview,并根据上面实现的链接进行检查,它会工作。

希望它有帮助

+0

但丁的解决方案存在问题。他创建了5个RadioButton!我必须创建相同的RadioButton,因为我不知道数字。我能怎么做? – michoprogrammer 2012-02-21 14:52:09

+0

好吧,我开始明白这个问题.. – michoprogrammer 2012-02-21 20:40:36

+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有助于理解该问题。 现在我创建了与单选按钮相同的东西,但我不知道为什么可以检查很多按钮,而不仅仅是一个......我想问题是我没有设置radiogroup,但我不知道我不知道我可以在哪里设置它! 对不起新手问题,但我只用了2周的android ... – michoprogrammer 2012-02-21 20:47:39