android开发中 listview和checkbox结合

通过重写listview的adapter,将listview和checkbox结合在一起,并且二者可以分别操作。

[1].[文件] activity_menu.xml ~ 2KB   
下载(13)
跳至 [1] [2] [3] [4]

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

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

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical"

>

     <ListView

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

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:layout_weight="2.0"

        android:scrollbars="vertical"
/>

    <TextView

        android:id="@+id/foodname"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:layout_weight="1.0"

        android:textSize="20dp"

        android:text=""
/>

      <TextView

        android:id="@+id/price"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:layout_weight="1.0"

        android:textSize="20dp"

        android:text=""
/>

    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content">

        <Button

           
android:id="@+id/call"

           
android:layout_width="wrap_content"

           
android:layout_height="wrap_content"

           
android:background="@drawable/thphone1"

           
android:layout_weight="1.0"

        android:textSize="20dp"

           
android:text="电话订餐"
/>

        
<Button

        android:id="@+id/cancelButton"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_weight="1.0"

        android:textSize="20dp"

        android:text="取消"
/>

        

    </LinearLayout>

     

</LinearLayout>

[2].[文件] listview_style.xml ~ 1KB   
下载(7)
跳至 [1] [2] [3] [4]

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

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

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

    android:id="@+id/RelativeLayout01"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:paddingBottom="4dip"

    android:paddingLeft="12dip"

    android:paddingRight="12dip"
>

<CheckBox

        android:id="@+id/CheckBox01"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentRight="true"

        android:focusable="false"

        
android:clickable="false"

        android:focusableInTouchMode="false"

        android:gravity="center_vertical"

        android:paddingTop="12dip"

        >

    </CheckBox>

    <TextView

        android:id="@+id/topTextView"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="TextView1"

        android:textSize="20dip"
/>

    <TextView

        android:id="@+id/bottomTextView"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:layout_below="@+id/topTextView"

        android:text="TextView2"
>

    </TextView>

</RelativeLayout>

[3].[文件] MenuActivity.java ~ 6KB   
下载(7)
跳至 [1] [2] [3] [4]

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

package
com.amaker.wlo;

import
java.io.InputStream; import
java.net.URL; import
java.net.URLConnection; import
java.util.ArrayList; import
java.util.HashMap; import
java.util.List;

import
javax.xml.parsers.DocumentBuilder; import
javax.xml.parsers.DocumentBuilderFactory;

import
org.w3c.dom.Document; import
org.w3c.dom.NodeList;

import
android.app.Activity; import
android.content.Context; import
android.content.Intent; import
android.content.SharedPreferences; import
android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import
com.amaker.util.HttpUtil;

public
class MenuActivity
extends Activity {

    private
ListView listview;

    private
TextView totalPrice;

    private
TextView totalFood;

    private
Button callBtn;

    private
Button cancleBtn;

    @Override

    protected
void onCreate(Bundle savedInstanceState) {

       
super.onCreate(savedInstanceState);

       
setContentView(R.layout.activity_menu);

        

       
listview=(ListView)findViewById(android.R.id.list);

        

        
totalPrice=(TextView)findViewById(R.id.price);

         

        
totalFood=(TextView)findViewById(R.id.foodname);

         

        
callBtn=(Button)findViewById(R.id.call);

        
callBtn.setOnClickListener(callListener);

         

        
cancleBtn=(Button)findViewById(R.id.cancelButton);

        
cancleBtn.setOnClickListener(canclelistener);

         

        
Context context=null;

           
try {

                
context= createPackageContext("com.amaker.wlo", Context.CONTEXT_IGNORE_SECURITY);

           
} catch
(NameNotFoundException e) {

               
// TODO Auto-generated catch block                
e.printStackTrace();

           
}

           
SharedPreferences preferences = context.getSharedPreferences("shop_id", MODE_WORLD_WRITEABLE);

           
int shopid=preferences.getInt("shopid",
0);

            

          

         

       
String urlStr = HttpUtil.BASE_URL + "servlet/FoodServlet?shopId="+shopid;

       
try {

           
// 实例化URL            
URL url =
new URL(urlStr);

           
// URLConnection 实例            
URLConnection conn = url.openConnection();

           
// 获得输入流            
InputStream in = conn.getInputStream();

           
// 获得DocumentBuilderFactory对象            
DocumentBuilderFactory factory = DocumentBuilderFactory

                   
.newInstance();

           
// 获得DocumentBuilder对象            
DocumentBuilder builder = factory.newDocumentBuilder();

           
// 获得Document对象            
Document doc = builder.parse(in);

           
// 获得节点列表            
NodeList nl = doc.getElementsByTagName(
"food");

           
// Spinner数据            
ArrayList<HashMap<String, Object>> listitem =
new
ArrayList<HashMap<String, Object>>();

           
// 获得XML数据            
for
(int
i = 0; i < nl.getLength(); i++) {

               
// 商家編號                
// 商家名字foodPrice
                String foodName = doc.getElementsByTagName("foodName")

                       
.item(i).getFirstChild().getNodeValue();

               
String foodPrice = doc.getElementsByTagName("foodPrice")

                       
.item(i).getFirstChild().getNodeValue();

               
HashMap<String, Object> map = new
HashMap<String, Object>();

               
map.put("foodName", foodName);

               
map.put("foodPrice", foodPrice+"元");

               
listitem.add(map);

           
}

           
MenuListAdapter listAdapter = new
MenuListAdapter(this,listitem, R.layout.listview_style,

                   
new String[] {
"foodName", "foodPrice"
}, 

                   
new int[] { R.id.topTextView, R.id.bottomTextView }

           
);

            

           
listview.setAdapter(listAdapter);

           
listview.setOnItemClickListener(getMenu);

       
}catch
(Exception e) {

           
e.printStackTrace();

       
}

        

        

    }

    

    OnItemClickListener getMenu=new
OnItemClickListener() {

        

       
int sumprice=0
//定义一个存储所有价格的变量        
String sumfood=
""
//定义一个存储所有食物的变量        
@Override

       
public void
onItemClick(AdapterView<?> parent, View view,
int
position,

               
long id) {

            

              
RelativeLayout lr = (RelativeLayout) view;

               

              

            

               

               

               

              
TextView tvtop = (TextView) lr.getChildAt(1);

                

               
String foodName=tvtop.getText().toString()+" ";

                

                

                

                

               
TextView tv = (TextView) lr.getChildAt(2);

               

               
String s = tv.getText().toString();

               

              
int foodprice=Integer.parseInt(s.substring(0, s.indexOf("元")));

               

               

              

              

             
// 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤
               ViewHolder holder = (ViewHolder) view.getTag();

               
// 改变CheckBox的状态                
holder.cb.toggle();

               
// 将CheckBox的选中状况记录下来                
MenuListAdapter.getIsSelected().put(position, holder.cb.isChecked()); 

               
// 调整选定条目                
if
(holder.cb.isChecked() == true) {

                   
sumprice=sumprice+foodprice;

                   
sumfood=sumfood+foodName;

               
} else
{

                   
sumprice=sumprice-foodprice;

                   
sumfood=sumfood.replace(foodName, "");

                    

               
}

               
// 用TextView显示                
totalPrice.setText(
"你預計消費:  "+sumprice);

                   

                   

               
totalFood.setText("你已經點了:  "+sumfood);

                

               

            

       
}

    };

         

          

       
OnClickListener callListener=new
OnClickListener() {

        

       
@Override

       
public void
onClick(View v) {

           
Context context=null;

           
try {

                
context= createPackageContext("com.amaker.wlo", Context.CONTEXT_IGNORE_SECURITY);

           
} catch
(NameNotFoundException e) {

               
// TODO Auto-generated catch block                
e.printStackTrace();

           
}

           
SharedPreferences pref = context.getSharedPreferences("phoneinfo", MODE_WORLD_WRITEABLE);

           
String PhoneNum=pref.getString("PhoneNum",
"");

           
Intent intent = new
Intent(Intent.ACTION_CALL,Uri.parse("tel:"+PhoneNum));  

           
startActivity(intent);  

            

       
}

    };

               

    OnClickListener canclelistener=new
OnClickListener() {

        

       
@Override

       
public void
onClick(View v) {

           
Intent intent=new
Intent(MenuActivity.this,MainMenuActivity.class);

           
startActivity(intent);

            

       
}

    };

                

        

}

[4].[文件] MenuListAdapter.java ~ 2KB   
下载(7)
跳至 [1] [2] [3] [4]

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

package
com.amaker.wlo;

import
java.util.ArrayList; import
java.util.HashMap; import
java.util.List; import
java.util.Map;

import
android.content.Context; import
android.view.LayoutInflater; import
android.view.View; import
android.view.ViewGroup; import
android.widget.BaseAdapter; import
android.widget.CheckBox; import
android.widget.SimpleAdapter; import
android.widget.TextView;

public
class MenuListAdapter
extends SimpleAdapter {

    // 用来控制CheckBox的选中状况
    private static
HashMap<Integer, Boolean> isSelected;

    // 用来导入布局
    private LayoutInflater inflater =
null;

    private
List<? extends
Map<String, ?>> Mdata;

    public
MenuListAdapter(Context context,

           
List<? extends
Map<String, ?>> data,
int
resource, String[] from,

           
int[] to) {

       
super(context, data, resource, from, to);

       
this.Mdata=data;

       
isSelected=new
HashMap<Integer, Boolean>();

       
inflater = LayoutInflater.from(context);

       
initDate();

    }

    

    private
void initDate(){

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

           
getIsSelected().put(i,false);

       
}

    }

    @Override

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

       
ViewHolder holder = null;

       
if (convertView ==
null) {

           
// 获得ViewHolder对象            
holder =
new ViewHolder();

           
// 导入布局并赋值给convertview            
convertView = inflater.inflate(R.layout.listview_style,
null);

           
holder.tv1 = (TextView) convertView.findViewById(R.id.topTextView);

           
holder.tv2 = (TextView) convertView.findViewById(R.id.bottomTextView);

           
holder.cb = (CheckBox) convertView.findViewById(R.id.CheckBox01);

           
// 为view设置标签            
convertView.setTag(holder);

       
} else
{

           
// 取出holder            
holder = (ViewHolder) convertView.getTag();

       
}

       
// 设置list中TextView的显示        
//holder.tv1.setText();
        holder.tv1.setText(((Map)getItem(position)).get("foodName").toString());

       
holder.tv2.setText(((Map)getItem(position)).get("foodPrice").toString());

       
// 根据isSelected来设置checkbox的选中状况        
holder.cb.setChecked(getIsSelected().get(position));

       
return convertView;

    }

    public
static HashMap<Integer, Boolean> getIsSelected() {

       
return isSelected;

    }

    public
static void
setIsSelected(HashMap<Integer, Boolean> isSelected) {

       
MenuListAdapter.isSelected = isSelected;

    }

}

class
ViewHolder {

    TextView tv1;

    TextView tv2;

    CheckBox cb;

}

时间: 2024-10-09 04:50:09

android开发中 listview和checkbox结合的相关文章

由浅入深讲解android开发中listview的性能优化

ListView是一种可以显示一系列项目并能进行滚动显示的View.在每行里,既可以是简单的文本,也可以是复杂的结构.一般情况下,你都需要保证ListView运行得很好(即:渲染更快,滚动流畅).在接下来的内容里,我将就ListView的使用,向大家提供几种解决不同性能问题的解决方案. 如果你想使用ListView,你就不得不使用ListAdapter来显示内容.SDK中,已经有了几种简单实现的Adapter: ·         ArrayAdapter<T> (显示数组对象,使用toStr

Android开发中常用的ListView列表的优化方式ViewHolder

在Android开发中难免会遇到大量的数据加载到ListView中进行显示, 然后其中最重要的数据传递桥梁Adapter适配器是常用的,随着市场的需 求变化ListView'条目中的内容是越来越多这就需要程序员来自定义适配器, 而关键的就是适配器的优化问题,适配器没有优化好往往就会造成OOM (内存溢出)或者是滑动卡顿之类的问题,接下来我就给大家介绍一种常 用的Adapter优化方法 1 /** 2 * list View的适配器 3 */ 4 class Adapter extends Bas

android开发中应该注意的问题

1. Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修改到处有效. 2. 数据库表段字段常量和SQL逻辑分离,更清晰. 3. 全局变量放全局类中,模块私有放自己的管理类中,不要相信庞大的管理的东西会带来什么好处,可能是一场灾难. 4. 如果数据没有必要加载,私有模块数据务必延迟初始化,谨记为用户节省内存,总不会有坏处. 5. 异常抛出,集中到合适的位置处理,不要抛出来异常立即捕获,搞的到处是catch. 6. 地址

Android开发:ListView、AdapterView、RecyclerView全面解析

目录 AdapterView简介 AdapterView本身是一个抽象类,AdapterView及其子类的继承关系如下图: 特征: AdapterView继承自ViewGroup,本质是个容器 AdapterView可以包含多个"列表项",并将这多个列表项以合适的形式展示 AdapterView显示的列表项内容由Adapter提供 它派生的子类在用法上也基本相似,只是在显示上有一定区别,因此把他们也归为一类. 由AdapterView直接派生的三个类: AbsListView.AbsS

Android开发中,那些让你觉得相见恨晚的方法、类或接口

本篇文章内容提取自知乎android开发中,有哪些让你觉得相见恨晚的方法.类或接口?,其实有一部是JAVA的,但是在android开发中也算常见.大多数的函数自己还是见过的,这里记录一下备忘.同时呢,也推荐一个github项目,里面记录了自己日常开发中见过的比较有用的东西开发中常用的工具.链接 Throwable类中的getStackTrace()方法,根据这个方法可以得到函数的逐层调用地址,其返回值为StackTraceElement[],而在StackTraceElement类中有四个方法g

Android开发中遇到的小问题 一

1)想要ListView活着Girdview左右留些空隙,但Scrollbar要在屏幕最右边 在xml中加入 android:paddingLeft="8dp" android:paddingRight="8dp" android:scrollbarStyle="outsideOverlay" 2)用XML实现一个圆角矩形的drawable <?xml version="1.0" encoding="utf-8

Android 开发中使用 Recyclerview

Android 开发中 Recyclerview 的使用 Overview 学习自:博客园 CSDN Android 官方文档 Android 呈现数据的方式有很多种,使用自定义控件,使用 ListView,使用Recyclerview. 那么我们今天看一下Android 中 如是使用 Recyclerview. 声明依赖性 官方文档所示,我们需要声明以下依赖性: dependencies { implementation "androidx.recyclerview:recyclerview:

android开发中碰到的三个小问题

Android开发中注意到的几个问题 1.  关于actionbar 初始化配置actionbar,getactionbar经常为null,原因是因为在源码或者布局文件中设置了全屏显示的缘故,不设置全屏显示就不会有问题. 2.  关于textview Textview默认是没有焦点的,因此不可能有点击事件,也无法直接实现背景的selector.通过设置android:clickable = true;就可以了,这一点与Button有很大的不同 3.  关于sourcinsight中的php代码.

android开发中监听器的三种实现方法(OnClickListener)

Android开发中监听器的实现有三种方法,对于初学者来说,能够很好地理解这三种方法,将能更好地增进自己对android中监听器的理解. 一.什么是监听器. 监听器是一个存在于View类下的接口,一般以On******Llistener命名,实现该接口需要复写相应的on****(View v)方法(如onClick(View v)). 二.监听器的三种实现方法 (以OnClickListener为例) 方法一:在Activity中定义一个内部类继承监听器接口(这里是OnClickListener