`

ListView and CheckBox

 
阅读更多

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:background="#98F5FF" android:orientation="vertical"
	android:layout_width="fill_parent" android:layout_height="fill_parent">
	<ListView android:id="@+id/lv" android:layout_width="fill_parent"
		android:layout_height="300dp" />
	<EditText android:id="@+id/task_opinion" android:lines="3"
		 android:hint="请添加您的选项"
		android:layout_marginTop="5dp" android:layout_marginBottom="2dp"
		android:scrollbars="vertical" android:layout_marginLeft="5dp"
		android:layout_marginRight="5dp" android:gravity="top|left"
		android:textSize="17sp" android:layout_height="wrap_content"
		android:layout_width="fill_parent">
	</EditText>
</LinearLayout>

 list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="horizontal" android:layout_width="fill_parent"
	android:layout_height="fill_parent" android:background="#98F5FF">
	<CheckBox android:id="@+id/cb" android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:focusable="false"
		android:focusableInTouchMode="false" android:clickable="false"
		android:checkMark="?android:attr/listChoiceIndicatorMultiple" />
	<TextView android:id="@+id/title" android:textColor="#000000"
		android:textSize="17sp" android:layout_marginLeft="5dp"
		android:layout_gravity="center" android:layout_weight="1"
		android:layout_width="wrap_content" android:layout_height="wrap_content" />
</LinearLayout>    

 

Main.java

public class Main extends Activity {
	ListView list;
	StringBuffer stringBuffer;
	EditText opinionEditText;
	public List<Map<String, Object>> mData;
	public String opition[] = { "选项1", "选项2", "选项3", "选项4", "选项5", "选项6",
			"选项7", "选项8", "选项9" };
	public boolean isSelect[] = new boolean[opition.length];// 初始复选情况

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();

		MyAdapter adapter = new MyAdapter(this, mData);
		list.setAdapter(adapter);
		list.setItemsCanFocus(false);
		list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
		list.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				ViewHolder vHollder = (ViewHolder) view.getTag();
				// 在每次获取点击的item时将对于的checkbox状态改变,同时修改map的值。
				vHollder.cBox.toggle();// 反转当前视图的选中状态

				String s = "";
				if (vHollder.cBox.isChecked() == true) {
					isSelect[position] = true;

				} else {
					isSelect[position] = false;
				}
				for (int i = 0; i < isSelect.length; i++) {
					if (isSelect[i]) { // 如果该选项被选中
						s = s + opition[i] + "、";
					}
				}
				MyAdapter.isSelected.put(position, vHollder.cBox.isChecked());
				try {
					opinionEditText.setText(s.substring(0, s.length() - 1));
				} catch (Exception e) {
				}
			}
		});
	}

	private void init() {
		stringBuffer = new StringBuffer();
		list = (ListView) findViewById(R.id.lv);
		opinionEditText = (EditText) findViewById(R.id.task_opinion);
		System.out.println(isSelect.length);
		for (int i = 0; i < opition.length; i++) {
			isSelect[i] = false;
			System.out.println(i);
		}
		// 测试数据
		mData = new ArrayList<Map<String, Object>>();
		Map<String, Object> map = new HashMap<String, Object>();
		for (int i = 0; i < opition.length; i++) {
			map = new HashMap<String, Object>();
			map.put("title", opition[i]);
			mData.add(map);
		}
	}
}

 


 

MyAdapter.java

public class MyAdapter extends BaseAdapter {
	private LayoutInflater mInflater;
	private List<Map<String, Object>> mData;
	public static Map<Integer, Boolean> isSelected;

	public MyAdapter(Main context, List<Map<String, Object>> mData1) {
		mData=mData1;
		mInflater = LayoutInflater.from(context);
		
		// 这儿定义isSelected这个map是记录每个listitem的状态,初始状态全部为false。
		isSelected = new HashMap<Integer, Boolean>();
		for (int i = 0; i < mData.size(); i++) {
			isSelected.put(i, false);
		}
	}

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

	@Override
	public Object getItem(int position) {
		return null;
	}

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

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder holder = null;
		// convertView为null的时候初始化convertView。
		if (convertView == null) {
			holder = new ViewHolder();
			convertView = mInflater.inflate(R.layout.list, null);
			holder.title = (TextView) convertView.findViewById(R.id.title);
			holder.cBox = (CheckBox) convertView.findViewById(R.id.cb);
			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}
		holder.title.setText(mData.get(position).get("title").toString());
		holder.cBox.setChecked(isSelected.get(position));
		return convertView;
	}

	public final class ViewHolder {
		public TextView title;
		public CheckBox cBox;
	}
}

  

分享到:
评论
1 楼 Will.Du 2012-01-19  
就没有个更好的方法么?我试了一下用setid来搞定,不过也有问题,监听会乱掉~~因为每次拉动list都会走getview~!!

相关推荐

    delphi中listview启用checkbox实现单选

    if ListView1.Items[I].Checked and (I &lt;&gt; Item.Index) then ListView1.Items[I].Checked := False; end; // 确保当前点击的项被选中 Item.Checked := True; end; end. ``` 在这个例子中,`ListView1...

    如何使用LISTVIEW虚拟模式和Checkbox

    ### 如何使用LISTVIEW虚拟模式和Checkbox #### 一、使用虚拟模式 ##### 1. 在使用之前进行设置 为了启用虚拟模式,我们有两种方法来设置`ListView`控件: - **通过属性设置**:在控件的属性窗口中找到“行为”...

    ListView_Checkbox-master.zip_NOOZ_Single and Single_showrgy_阿萨德

    这个名为"ListView_Checkbox-master.zip"的项目,从其标题"NOOZ_Single and Single_showrgy_阿萨德"来看,可能是一个实现了单选和多选功能的ListView示例。"Single and Single"可能指的是单选模式(single choice)...

    ListView与CheckBox

    当你在ListView的每个条目中添加了一个CheckBox,如果没有妥善处理,当你点击一个CheckBox时,由于视图复用,可能会看到其他条目的CheckBox状态也被改变了。这是因为ListView不知道哪些CheckBox对应于哪个数据项,...

    android基于ListView和CheckBox实现多选和全选记录的功能

    在做定制系统联系人的时候也遇到这样的需求,下面写个简单的通过ListView和CheckBox实现多选、全选的例子。下面是具体的代码. 效果如下: MultiSelectActivity /** * MultiSelectActivity */ public class ...

    listviewAndcheckbox

    当我们需要在ListView中结合Checkbox实现数据选中功能时,就需要处理好选中状态的保存和同步,以防止用户操作过程中出现状态错乱的问题。以下将详细阐述如何在ListView中正确地使用Checkbox并保存其选中状态。 1. *...

    android 可拖动listview

    我们需要在ListView的Item视图上添加OnTouchListener,监听用户的触摸事件,当检测到拖动开始时启动Drag and Drop操作。 2. **ViewDragHelper**:这是Android SDK中用于实现内部拖放功能的工具类,它可以轻松地帮助...

    Android ListView组件详解及示例代码

    2. 复选框(CheckBox):通过使用复选框适配器(CheckedTextView或自定义布局)可以实现列表项的选择功能。 3. 动态加载(Pagination):对于大量数据,可以使用`OnScrollListener`监听滚动事件,实现分页加载。 4. ...

    android UI 布局

    另外,ListView还支持头尾视图(Header and Footer)、分组视图(ExpandableListView)等高级功能。 接下来是GridView,它是类似照片墙的布局,可以展示二维网格的数据。与ListView相似,GridView也需要Adapter来...

    Beginning Microsoft Visual CSharp 2008 Wiley Publishing(english)

    The RadioButton and CheckBox Controls 491 The RichTextBox Control 498 The ListBox and CheckedListBox Controls 506 The ListView Control 512 The TabControl Control 523 Summary 528 ...

    Adriod控件用法2

    10. **RadioButton and CheckBox** - `RadioButton`和`CheckBox`用于实现单选和多选功能。`RadioButton`通常与`RadioGroup`一起使用,`RadioGroup`中的一个按钮被选中时,其他按钮会自动取消选中。`CheckBox`则允许...

    android开发demo集合

    1、LinearLayout Button、RadioGroup、 CheckBox 2、TableLayout 3、FrameLayout 霓虹灯效果 4、RelativeLayout 梅花效果 5、自定义view跟着触点走的小球 6、 ListView 列表视图 7、WebView web视图 8、...

    android初学者入门项目

    1、LinearLayout Button、RadioGroup、 CheckBox 2、TableLayout 3、FrameLayout 霓虹灯效果 4、RelativeLayout 梅花效果 5、自定义view跟着触点走的小球 6、 ListView 列表视图 7、WebView web视图 8、...

    MoreChooseList.zip

    // getters and setters } ``` 然后,在适配器(Adapter)中,你需要重写`getView()`方法,根据`isSelected`状态来设置视图的选中样式。在`onItemClick()`事件处理中,更新对应Item对象的`isSelected`值,同时更新...

    delphi2010皮肤控件-VCLSkinv5.30FS

    *Fix problem when checkbox and radiobutton is right-to-left reading . News in 4.32 10/03/2006 *Fix problem of button shortcut. News in 4.31 9/25/2006 *Support Toolbarwindow32 in Opendialog. News in...

    VB编程资源大全(英文源码 控件)

    &lt;END&gt;&lt;br&gt;5 , vbo_checkcombo.zip Add a checkbox to a combo box and use it to enabled/disable the combo! or whatever you would like to do with it! &lt;END&gt;&lt;br&gt;6 , vbo_controlframe.zip Create your ...

    ASP_NET_4_and_Visual_Studio_2010_Web_Development_Overview.pdf

    - **ListView控件增强**:提供了更多的选项来定制ListView控件的外观和行为。 - **CheckBoxList和RadioButtonList控件增强**:这些控件现在支持更多交互操作,如动态更改选项等。 - **Menu控件改进**:增强了菜单...

    Android高级应用源码-快速选择条件进行结果检索的实现.zip

    例如,`WHERE`子句用于匹配关键词,`AND`或`OR`操作符连接多个筛选条件。 4. **实时检索**:为了提供即时反馈,开发者可能会采用实时检索策略。这意味着每当用户更改搜索条件时,应用都会立即更新结果。这可能通过...

Global site tag (gtag.js) - Google Analytics