展会信息港展会大全

Android中ListView结合CheckBox判断选中项
来源:互联网   发布日期:2015-11-25 22:43:20   浏览:1847次  

导读:本文主要实现在自定义的ListView布局中加入CheckBox控件,通过判断用户是否选中CheckBox来对ListView的选中项进行相应的操作。通过一个Demo来展示该功能,选中ListView中的某一项,然后点击Button按钮来显示选中......

本文主要实现在自定义的ListView布局中加入CheckBox控件,通过判断用户是否选中CheckBox来对ListView的选中项进行相应的操作。通过一个Demo来展示该功能,选中ListView中的某一项,然后点击Button按钮来显示选中了哪些项。

[1] 程序结构图如下:

其中Person.java是实体类,MainActivity.java是Activity组件类。listitem.xml是自定义的列表每项布局文件。

[2] listitem.xml布局文件源码如下:

01

<?xml version="1.0" encoding="utf-8"?>

02

<LinearLayout

03

xmlns:android="http://schemas.android.com/apk/res/android"

04

android:orientation="vertical"

05

android:layout_width="fill_parent"

06

android:layout_height="fill_parent">

07

<LinearLayout

08

android:layout_width="fill_parent"

09

android:layout_height="wrap_content"

10

android:orientation="horizontal"

11

android:descendantFocusability="blocksDescendants">

12

<CheckBox

13

android:id="@+id/list.select"

14

android:layout_width="wrap_content"

15

android:layout_height="wrap_content"/>

16

<TextView

17

android:id="@+id/list.name"

18

android:layout_width="fill_parent"

19

android:layout_height="wrap_content"

20

android:layout_weight="1"

21

android:text="Name"

22

android:layout_gravity="center"

23

android:textSize="20dp"

24

android:layout_marginLeft="10dp"/>

25

<TextView

26

android:id="@+id/list.address"

27

android:layout_width="fill_parent"

28

android:layout_height="wrap_content"

29

android:layout_weight="1"

30

android:text="Address"

31

android:layout_gravity="center"

32

android:textSize="20dp"/>

33

</LinearLayout>

34

</LinearLayout>

[3] main.xml布局文件源码如下:

01

<?xml version="1.0" encoding="utf-8"?>

02

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

03

android:orientation="vertical"

04

android:layout_width="fill_parent"

05

android:layout_height="fill_parent">

06

<Button

07

android:id="@+id/show"

08

android:layout_width="fill_parent"

09

android:layout_height="wrap_content"

10

android:text="Show"/>

11

<ListView

12

android:id="@+id/lvperson"

13

android:layout_width="fill_parent"

14

android:layout_height="fill_parent"/>

15

</LinearLayout>

[4] Person.java实体类源码如下:

01

package com.andyidea.bean;

02

03

public class Person {

04

05

private String name;

06

private String address;

07

08

public String getName() {

09

return name;

10

}

11

public void setName(String name) {

12

this.name = name;

13

}

14

public String getAddress() {

15

return address;

16

}

17

public void setAddress(String address) {

18

this.address = address;

19

}

20

21

}

[5] MainActivity.java类源码如下:

001

package com.andyidea.listview;

002

003

import java.util.ArrayList;

004

import java.util.HashMap;

005

import java.util.List;

006

007

import com.andyidea.bean.Person;

008

009

import android.app.Activity;

010

import android.app.AlertDialog;

011

import android.content.Context;

012

import android.os.Bundle;

013

import android.util.Log;

014

import android.view.LayoutInflater;

015

import android.view.View;

016

import android.view.ViewGroup;

017

import android.widget.BaseAdapter;

018

import android.widget.Button;

019

import android.widget.CheckBox;

020

import android.widget.ListView;

021

import android.widget.TextView;

022

023

public class MainActivity extends Activity {

024

025

Button show;

026

ListView lv;

027

List<Person> persons = new ArrayList<Person>();

028

Context mContext;

029

MyListAdapter adapter;

030

List<Integer> listItemID = new ArrayList<Integer>();

031

032

/** Called when the activity is first created. */

033

@Override

034

public void onCreate(Bundle savedInstanceState) {

035

super.onCreate(savedInstanceState);

036

setContentView(R.layout.main);

037

mContext = getApplicationContext();

038

show = (Button)findViewById(R.id.show);

039

lv = (ListView)findViewById(R.id.lvperson);

040

041

initPersonData();

042

adapter = new MyListAdapter(persons);

043

lv.setAdapter(adapter);

044

045

show.setOnClickListener(new View.OnClickListener() {

046

047

@Override

048

public void onClick(View v) {

049

050

listItemID.clear();

051

for(int i=0;i<adapter.mChecked.size();i++){

052

if(adapter.mChecked.get(i)){

053

listItemID.add(i);

054

}

055

}

056

057

if(listItemID.size()==0){

058

AlertDialog.Builder builder1 = newAlertDialog.Builder(MainActivity.this);

059

builder1.setMessage("没有选中任何记录");

060

builder1.show();

061

}else{

062

StringBuilder sb = new StringBuilder();

063

064

for(int i=0;i<listItemID.size();i++){

065

sb.append("ItemID="+listItemID.get(i)+" . ");

066

}

067

AlertDialog.Builder builder2 = newAlertDialog.Builder(MainActivity.this);

068

builder2.setMessage(sb.toString());

069

builder2.show();

070

}

071

}

072

});

073

}

074

075

/**

076

* 模拟数据

077

*/

078

private void initPersonData(){

079

Person mPerson;

080

for(int i=1;i<=12;i++){

081

mPerson = new Person();

082

mPerson.setName("Andy"+i);

083

mPerson.setAddress("GuangZhou"+i);

084

persons.add(mPerson);

085

}

086

}

087

088

//自定义ListView适配器

089

class MyListAdapter extends BaseAdapter{

090

List<Boolean> mChecked;

091

List<Person> listPerson;

092

HashMap<Integer,View> map = new HashMap<Integer,View>();

093

094

public MyListAdapter(List<Person> list){

095

listPerson = new ArrayList<Person>();

096

listPerson = list;

097

098

mChecked = new ArrayList<Boolean>();

099

for(int i=0;i<list.size();i++){

100

mChecked.add(false);

101

}

102

}

103

104

@Override

105

public int getCount() {

106

return listPerson.size();

107

}

108

109

@Override

110

public Object getItem(int position) {

111

return listPerson.get(position);

112

}

113

114

@Override

115

public long getItemId(int position) {

116

return position;

117

}

118

119

@Override

120

public View getView(int position, View convertView, ViewGroup parent) {

121

View view;

122

ViewHolder holder = null;

123

124

if (map.get(position) == null) {

125

Log.e("MainActivity","position1 = "+position);

126

127

LayoutInflater mInflater = (LayoutInflater) mContext

128

.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

129

view = mInflater.inflate(R.layout.listitem, null);

130

holder = new ViewHolder();

131

holder.selected = (CheckBox)view.findViewById(R.id.list_select);

132

holder.name = (TextView)view.findViewById(R.id.list_name);

133

holder.address = (TextView)view.findViewById(R.id.list_address);

134

final int p = position;

135

map.put(position, view);

136

holder.selected.setOnClickListener(newView.OnClickListener() {

137

138

@Override

139

public void onClick(View v) {

140

CheckBox cb = (CheckBox)v;

141

mChecked.set(p, cb.isChecked());

142

}

143

});

144

view.setTag(holder);

145

}else{

146

Log.e("MainActivity","position2 = "+position);

147

view = map.get(position);

148

holder = (ViewHolder)view.getTag();

149

}

150

151

holder.selected.setChecked(mChecked.get(position));

152

holder.name.setText(listPerson.get(position).getName());

153

holder.address.setText(listPerson.get(position).getAddress());

154

155

return view;

156

}

157

158

}

159

160

static class ViewHolder{

161

CheckBox selected;

162

TextView name;

163

TextView address;

164

}

165

}

[6] 程序运行后的结果如下:

赞助本站

人工智能实验室
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港