Android在listview添加checkbox如何实现一直都是新手朋友们的头疼问题,接下来为您详细介绍实现方法,感兴趣的朋友可以了解下
<!--NEWSZW_HZH_BEGIN-->
主界面CheckBoxinListViewActivity.java代码如下:
public class CheckBoxinListViewActivity extends Activity {
/** Called when the activity is first created. */
private MyAdapter adapter;
private ListView listview;
private Button checkAll;
private Button noCheckAll;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listview = (ListView)findViewById(R.id.listview);
checkAll = (Button)findViewById(R.id.button1);
noCheckAll = (Button)findViewById(R.id.button2);
adapter = new MyAdapter();
listview.setAdapter(adapter);
checkAll.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
adapter.checkAll();
}
});
noCheckAll.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
adapter.noCheckAll();
}
});
}
private class MyAdapter extends BaseAdapter{
private ArrayList<Message> list= new ArrayList<Message>();
public MyAdapter(){
for(int i = 1 ;i<=100 ; i++){
list.add(new Message("item_"+i));
}
}
public void checkAll(){
for(Message msg:list){
msg.isCheck = true;
}
notifyDataSetChanged();
}
public void noCheckAll(){
for(Message msg:list){
msg.isCheck = false;
}
notifyDataSetChanged();
}
@Override
public int getCount() {
return list.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 viewHolder;
if(convertView == null){
LayoutInflater inflater = LayoutInflater.from(CheckBoxinListViewActivity.this);
convertView = inflater.inflate(R.layout.listview_item, null);
viewHolder = new ViewHolder();
viewHolder.checkBox = (CheckBox)convertView.findViewById(R.id.checkBox1);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder)convertView.getTag();
}
final Message msg = list.get(position);
viewHolder.checkBox.setText(msg.str);
viewHolder.checkBox.setChecked(msg.isCheck);
//注意这里设置的不是onCheckedChangListener,还是值得思考一下的
viewHolder.checkBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(msg.isCheck){
msg.isCheck = false;
}else{
msg.isCheck = true;
}
}
});
return convertView;
}
}
private class ViewHolder{
CheckBox checkBox;
}
}
适配器所适配的消息Message.java如下:
public class Message {
public boolean isCheck;
public String str;
public Message(String str){
this.str = str;
}
}
主界面CheckBoxinListViewActivity.java代码如下:
public class CheckBoxinListViewActivity extends Activity {
/** Called when the activity is first created. */
private MyAdapter adapter;
private ListView listview;
private Button checkAll;
private Button noCheckAll;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listview = (ListView)findViewById(R.id.listview);
checkAll = (Button)findViewById(R.id.button1);
noCheckAll = (Button)findViewById(R.id.button2);
adapter = new MyAdapter();
listview.setAdapter(adapter);
checkAll.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
adapter.checkAll();
}
});
noCheckAll.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
adapter.noCheckAll();
}
});
}
private class MyAdapter extends BaseAdapter{
private ArrayList<Message> list= new ArrayList<Message>();
public MyAdapter(){
for(int i = 1 ;i<=100 ; i++){
list.add(new Message("item_"+i));
}
}
public void checkAll(){
for(Message msg:list){
msg.isCheck = true;
}
notifyDataSetChanged();
}
public void noCheckAll(){
for(Message msg:list){
msg.isCheck = false;
}
notifyDataSetChanged();
}
@Override
public int getCount() {
return list.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 viewHolder;
if(convertView == null){
LayoutInflater inflater = LayoutInflater.from(CheckBoxinListViewActivity.this);
convertView = inflater.inflate(R.layout.listview_item, null);
viewHolder = new ViewHolder();
viewHolder.checkBox = (CheckBox)convertView.findViewById(R.id.checkBox1);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder)convertView.getTag();
}
final Message msg = list.get(position);
viewHolder.checkBox.setText(msg.str);
viewHolder.checkBox.setChecked(msg.isCheck);
//注意这里设置的不是onCheckedChangListener,还是值得思考一下的
viewHolder.checkBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(msg.isCheck){
msg.isCheck = false;
}else{
msg.isCheck = true;
}
}
});
return convertView;
}
}
private class ViewHolder{
CheckBox checkBox;
}
}
适配器所适配的消息Message.java如下:
public class Message {
public boolean isCheck;
public String str;
public Message(String str){
this.str = str;
}
}
main.xml代码如下:
<?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">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button android:text="全选" android:id="@+id/button1"
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text="撤消" android:id="@+id/button2"
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout>
<ListView android:id="@+id/listview" android:layout_height="fill_parent"
android:layout_width="fill_parent" />
</LinearLayout>
listview_item.xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center">
<CheckBox
android:text="CheckBox"
android:id="@+id/checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
<?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">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button android:text="全选" android:id="@+id/button1"
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text="撤消" android:id="@+id/button2"
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout>
<ListView android:id="@+id/listview" android:layout_height="fill_parent"
android:layout_width="fill_parent" />
</LinearLayout>
listview_item.xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center">
<CheckBox
android:text="CheckBox"
android:id="@+id/checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
相关推荐
- 在ListView的每个列表项中添加CheckBox,可以实现用户对单个条目的选择。 - 通常在ListView的item布局文件中添加CheckBox元素,并设置其初始状态。 3. **getView()方法** - 在自定义Adapter的getView()方法中...
总结,通过理解ListView的工作原理和优化复用机制,我们可以有效地解决ListView与CheckBox的焦点冲突,以及在复用过程中CheckBox状态的保持。同时,结合全选、反选、删除等附加功能,可以为用户提供更友好的交互体验...
在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。然而,ListView的复用机制有时会导致一些问题,特别是在涉及复选框(Checkbox)的状态管理时。本篇文章将详细探讨这个问题,并提供一个完美的...
以下我们将详细探讨如何在Android中实现ListView与Checkbox的联用。 1. **ListView的基本使用** - **Adapter**:ListView的工作原理是通过Adapter将数据绑定到视图上。常见的Adapter有ArrayAdapter、SimpleAdapter...
在Android开发中,ListView是一种常用的控件,用于展示大量数据列表。它允许用户滚动查看多个条目,并且可以通过适配器(Adapter)机制灵活地显示各种类型的数据。然而,当ListView内部嵌套CheckBox或其他可交互组件...
总之,这份源码示例涵盖了Android开发中常见的ListView与CheckBox结合使用场景,包括全选、全不选和删除功能的实现,对于初学者和有经验的开发者来说都是一个很好的学习资源。通过深入研究并理解这些代码,可以提升...
在实现过程中,还需要考虑一些优化点,比如使用SparseBooleanArray替代ArrayList来存储CheckBox的状态,以节省内存;或者使用长按事件来启动多选模式,提供更好的用户体验。 此外,批量删除操作可能会涉及到数据的...
- 在ListView的每个列表项中添加CheckBox,可以提供多选功能,让用户能够选择感兴趣的项目。 - 这通常通过自定义ListView的Adapter(例如继承自BaseAdapter或ArrayAdapter)实现,复写getView()方法,在其中为每个...
6. 复选框和点击事件:ListView支持行的单选或多选,可以通过在列表项布局中添加CheckBox,并在Adapter中处理选中状态。同时,可通过设置`setOnItemClickListener()`监听用户的点击事件。 7. 头部和尾部:通过`...
当你在ListView的每个条目中添加了一个CheckBox,如果没有妥善处理,当你点击一个CheckBox时,由于视图复用,可能会看到其他条目的CheckBox状态也被改变了。这是因为ListView不知道哪些CheckBox对应于哪个数据项,...
总之,创建一个Android的多级树形ListView菜单需要深入理解Adapter的工作原理,熟练掌握数据结构和布局管理,以及实现事件监听和数据操作。通过以上步骤,我们可以构建出一个功能丰富的树形菜单,支持全选/反选操作...
同样,先在Item视图的布局文件中添加CheckBox。为了跟踪选中的项,我们需要一个集合(如ArrayList)来存储选中状态。在Adapter的getView()方法中,根据这个集合来更新CheckBox的状态。同时,当用户点击CheckBox时,...
这个"android listview 例子"着重展示了ListView在实际应用中的复杂使用方式,特别是如何在一个ListView中包含各种不同的控件,以实现丰富的界面效果。 ListView的工作原理基于Adapter模式,Adapter是连接数据源和...
在Android开发中,ListView是一种非常常见且重要的组件,它用于展示大量的数据列表,通常用于创建类似于表格的效果。这篇博客“Android Listview表格”探讨了如何在Android应用中使用ListView来构建表格样式的视图。...
总之,实现ListView的全选、反选、删除及状态切换显示/隐藏CheckBox功能,需要对Android的Adapter机制有深入理解,并能够灵活运用事件监听和数据同步。通过这些功能,我们可以提供更加交互丰富的用户体验,满足用户...
实现全选、全不选、删除等功能.zip”显然包含了实现这样一个功能完善、用户交互良好的ListView与CheckBox结合的示例代码。下面我们将详细探讨相关的知识点。 1. **ListView**: - **适配器(Adapter)**: ListView...
在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。`Listview 长按弹出菜单`的功能可以极大地提升用户体验,使得用户在查看列表项时能快速执行相关操作。本教程将深入讲解如何实现这个功能,以及...
在Android开发中,Adapter是连接数据源和UI组件的关键角色,它使得数据能够适配并显示在ListView、GridView等视图组件中。然而,在实际应用中,我们常常遇到Adapter与CheckBox、EditText等交互控件冲突的问题。这...