可以做一个数据model利用adapter和listview关联起来。
- package de.vogella.android.listactivity;
- 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;
- }
- }
- <?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>
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.ArrayAdapter;
- import android.widget.CheckBox;
- import android.widget.CompoundButton;
- import android.widget.TextView;
-
- 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;
- }
- }
- package de.vogella.android.listactivity;
-
- import java.util.ArrayList;
- import java.util.List;
-
- import android.app.ListActivity;
- import android.os.Bundle;
- import android.widget.ArrayAdapter;
-
- public class MyList extends ListActivity {
-
-
- /** Called when the activity is first created. */
-
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- // Create an array of Strings, that will be put to our ListActivity
- ArrayAdapter<Model> adapter = new InteractiveArrayAdapter(this,
- getModel());
- setListAdapter(adapter);
- }
-
- private List<Model> getModel() {
- List<Model> list = new ArrayList<Model>();
- list.add(get("Linux"));
- list.add(get("Windows7"));
- list.add(get("Suse"));
- list.add(get("Eclipse"));
- list.add(get("Ubuntu"));
- list.add(get("Solaris"));
- list.add(get("Android"));
- list.add(get("iPhone"));
- // Initially select one of the items
- list.get(1).setSelected(true);
- return list;
- }
-
- private Model get(String s) {
- return new Model(s);
- }
-
- }