购物车CheckBox全选、反选
注意:不是很完美
//--------------------主布局文件---------------------------------
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView android:layout_width="fill_parent"
android:layout_height="40dp"
android:text="已选中个数"
android:id="@+id/tv_num"
android:gravity="center"/>
<LinearLayout android:layout_width="fill_parent"
android:layout_height="40dp"
android:orientation="horizontal"
>
<CheckBox android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="fill_parent"
android:text="全选"
android:gravity="center"
android:id="@+id/cb_quanxuan"/>
<CheckBox android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="fill_parent"
android:text="反选"
android:gravity="center"
android:id="@+id/cb_fanxuan"/>
</LinearLayout>
<ListView android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@+id/lv"></ListView>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="40dp"
android:orientation="horizontal"
>
<TextView android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="2"
android:text="总价:"
android:id="@+id/tv_zongjai"
android:gravity="center"/>
<Button android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="支付"
android:id="@+id/bt_zifu"
android:gravity="center"/>
</LinearLayout>
</LinearLayout>
//------------------bean包-----------------------------------
package com.example.wodequanxuan;
public class Goods {
private String title;
private String money;
private boolean flag;
public Goods(String title, String money, boolean flag) {
super();
this.title = title;
this.money = money;
this.flag = flag;
}
public Goods() {
super();
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getMoney() {
return money;
}
public void setMoney(String money) {
this.money = money;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
@Override
public String toString() {
return "Goods [title=" + title + ", money=" + money + ", flag=" + flag
+ "]";
}
}
//--------------------listview 的条目---------------------------------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<CheckBox android:layout_width="60dp"
android:layout_height="wrap_content"
android:id="@+id/cb_checkbox"
android:gravity="center"/>
<TextView android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:id="@+id/tv_title"/>
<TextView android:layout_width="100dp"
android:layout_height="80dp"
android:id="@+id/tv_money"
android:gravity="center"/>
</LinearLayout>
//-------------------适配器------------------------------
package com.example.wodequanxuan;
import java.util.HashMap;
import java.util.List;
import android.content.Context;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.TextView;
public class MyAdapter extends BaseAdapter{
private List<Goods> goods;
private Context context;
private static HashMap<Integer, Boolean> isSelected;
private onCheckListener listener;
private CheckBox check;
public MyAdapter(List<Goods> goods, Context context) {
super();
this.goods = goods;
this.context = context;
isSelected = new HashMap<Integer, Boolean>();
for (int i = 0; i < goods.size(); i++) {
getIsSelected().put(i, false);
}
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return goods.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return goods.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
Goods goodss=goods.get(position);
if (convertView==null) {
convertView=View.inflate(context, R.layout.list_item, null);
holder=new ViewHolder();
holder.title=(TextView) convertView.findViewById(R.id.tv_title);
holder.money=(TextView) convertView.findViewById(R.id.tv_money);
holder.flag=(CheckBox) convertView.findViewById(R.id.cb_checkbox);
convertView.setTag(holder);
}
holder=(ViewHolder) convertView.getTag();
holder.title.setText(goodss.getTitle());
holder.money.setText(goodss.getMoney()+"");
holder.flag.setChecked(goodss.isFlag());
// 根据isSelected来设置checkbox的选中状况
holder.flag.setChecked(getIsSelected().get(position));
holder.flag.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO 自动生成的方法存根
if (isSelected.get(position)) {
isSelected.put(position, false);
setIsSelected(isSelected);
} else {
isSelected.put(position, true);
setIsSelected(isSelected);
}
listener.onCheck(isSelected);
}
});
return convertView;
}
static class ViewHolder{
public TextView title;
public TextView money;
public CheckBox flag;
}
public static HashMap<Integer, Boolean> getIsSelected() {
return isSelected;
}
public static void setIsSelected(HashMap<Integer, Boolean> isSelected) {
MyAdapter.isSelected = isSelected;
}
public void setListener(onCheckListener listener) {
this.listener = listener;
}
public interface onCheckListener {
void onCheck(HashMap<Integer, Boolean> map);
}
}
//-----------------------Activity 中------------------------------------------------
package com.example.wodequanxuan;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.example.wodequanxuan.MyAdapter.onCheckListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity implements onCheckListener {
private String urlPath="http://172.17.29.120/localuser/loupengfei/kaoshi/shoppingcar.json";
private List<Goods> goods=new ArrayList<Goods>();
private TextView tv_num;
private TextView tv_zongjai;
private CheckBox cb_fanxuan;
private CheckBox cb_quanxuan;
private int checkNum = 0; // 记录选中的条目数量
private float total = 0.00f;
private Handler handler=new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
String text=(String) msg.obj;
tojson(text);
break;
default:
break;
}
}
};
private ListView lv;
private MyAdapter adapter;
private void tojson(String text) {
try {
JSONObject obj=new JSONObject(text);
JSONArray data=obj.getJSONArray("data");
for (int i = 0; i < data.length(); i++) {
JSONObject json=data.getJSONObject(i);
String title=json.getString("title");
String money=json.getString("money");
Goods goodss=new Goods(title, money,false);
goods.add(goodss);
}
adapter = new MyAdapter(goods, this);
lv.setAdapter(adapter);
adapter.setListener(this);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到控件
tv_num = (TextView) findViewById(R.id.tv_num);
tv_zongjai = (TextView) findViewById(R.id.tv_zongjai);
cb_fanxuan = (CheckBox) findViewById(R.id.cb_fanxuan);
cb_quanxuan = (CheckBox) findViewById(R.id.cb_quanxuan);
lv = (ListView) findViewById(R.id.lv);
//获得数据
huodeshuju();
//cb_fanxuan.setOnClickListener(this);
//cb_quanxuan.setOnClickListener(this);
//反选
cb_fanxuan.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
checkNum=0;
//不为全选时,也就是有选中的,有没选中的
// 遍历list的长度,设为未选
for (int i = 0; i < goods.size(); i++) {
//获得当条目的选中状态
Boolean n=adapter.getIsSelected().get(i);
//如果选中,设为不选中
if (n) {
adapter.getIsSelected().put(i, false);
//获得选中条目的布尔值
Boolean a=adapter.getIsSelected().get(i);
//
if (a) {
total+=Float.valueOf(goods.get(i).getMoney());
Log.i("总价111:", total+"");
checkNum++;// 数量减1
}
}else{
adapter.getIsSelected().put(i, true);
Boolean a=adapter.getIsSelected().get(i);
if (a) {
total+=Float.valueOf(goods.get(i).getMoney());
Log.i("总价222:", total+"");
checkNum++;// 数量减1
}
}
}
// 刷新listview和TextView的显示
dataChanged(total);
//设置全选为不选中状态
cb_quanxuan.setChecked(false);
}
});
//全选
cb_quanxuan.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//当全选框变为全选时,
if (isChecked) {
// 当不是全选时,设置为全选
total = 0.00f;
// 遍历list的长度,设为已选
checkNum = goods.size();
for (int i = 0; i < goods.size(); i++) {
adapter.getIsSelected().put(i, true);
total += Float.valueOf(goods.get(i).getMoney()) ;
}
// 刷新listview和TextView的显示
dataChanged(total);
}else{
// 遍历list的长度,设为未选
for (int i = 0; i < goods.size(); i++) {
adapter.getIsSelected().put(i, false);
checkNum=0;// 数量减1
total = 0.00f;
}
// 刷新listview和TextView的显示
dataChanged(total);
}
//把反选设置为不选中
cb_fanxuan.setChecked(false);
}
});
}
private void huodeshuju() {
new Thread(){
public void run() {
try {
URL url=new URL(urlPath);
HttpURLConnection urlConnection=(HttpURLConnection) url.openConnection();
urlConnection.setConnectTimeout(5000);
urlConnection.setReadTimeout(5000);
urlConnection.setRequestMethod("GET");
int code=urlConnection.getResponseCode();
if (code==200) {
InputStream inputStream=urlConnection.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));
String liner;
StringBuffer buffer=new StringBuffer();
while ((liner=reader.readLine())!=null) {
buffer.append(liner);
}
String str=buffer.toString();
Log.i("shuju:", str);
Message message=new Message();
message.what=0;
message.obj=str;
handler.sendMessage(message);
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}.start();
}
private void dataChanged(float total2) {
DecimalFormat decimalFormat = new DecimalFormat();// 构造方法的字符格式这里如果小数不足2位,会以0补足.
String price_num = decimalFormat.format(total);// format 返回的是字符串
String str = "合计" + "¥" + price_num + " ";
// 通知listView刷新
adapter.notifyDataSetChanged();
// 用TextView显示 总价、选中数量
tv_zongjai.setText(str);
tv_num.setText("已选中:"+checkNum);
}
@Override
public void onCheck(HashMap<Integer, Boolean> map) {
// TODO 自动生成的方法存根
total = 0.00f;
checkNum = 0;
for (int i = 0; i < map.size(); i++) {
if (map.get(i)) {
total += Float.valueOf(goods.get(i).getMoney());
checkNum++;
}
}
//更新显示数据
dataChanged(total);
}
}
购物车CheckBox全选、反选的更多相关文章
- 表单javascript checkbox全选 反选 全不选
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- 关于Winform下DataGridView中实现checkbox全选反选、同步列表项的处理
近期接手一个winform 项目,虽然之前有.net 的经验,但是对一些控件的用法还不是很熟悉. 这段时间将会记录一些在工作中遇到的坎坷以及对应的解决办法,写出来与大家分享并希望大神提出更好解决方法来 ...
- jquery、js操作checkbox全选反选
全选反选checkbox在实际应用中比较常见,本文有个不错的示例,大家可以参考下 操作checkbox,全选反选//全选 function checkAll() { $('input[name=&qu ...
- jquery checkbox 全选反选代码只能执行一遍,第二次就失败
遇到问题背景: 在写到购物车的全选交互的时候,商品选中的状态只有在第一次的时候可以,第二次就无法选中:(代码如下) $(".chooseall").click(function() ...
- checkbox 全选反选实现全代码
//跳转到指定action function validateForm(url){ if($("#form").form('validate')){ var x=document. ...
- C# WinForm中实现CheckBox全选反选功能
今天一群里有人问到这个功能,其实应该挺简单,但提问题的人问题的出发点并没有描述清楚.因此,一个简简单单的需求,就引起了群内热烈的讨论.下面看看这个功能如何去实现,先上效果: 下面直接上代码,请不要在意 ...
- 表单Checkbox全选反选全不选
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Jquery学习笔记(4)--checkbox全选反选
可能有浏览器兼容性,注意html里的checked是一个属性,存在就默认选中. <!DOCTYPE html> <html lang="en"> <h ...
- jQuery实现checkbox全选反选及删除等操作
1.list.html 说明:用checkbox数组Check[]存放每一行的ID值 <div id="con"> <table width="100% ...
随机推荐
- Linux(power服务器)中kettle(2)
Hadoop集群硬件环境 4台机器 ip地址 172.16.1.131 172.16.1.132 172.16.1.133 172.16.1.134 每台内存16G 8核cpu 直接使用报错:
- digitalocean vpn安装配置教程
digitalocean是美国一家专业的vps提供商,优势是性价比高,最低配置512MB内存vps每月只要5美元,导致大陆用户疯狂涌入.关于digitalocean申请方法.digitalocean速 ...
- WTL版本ACEdit控件,改写自MFC版,附带源码
自动完成是个很酷也很实用的功能,比如在浏览器地址栏输入几个字母,相关的记录就会在下拉框中陈列出来. 最近在做公司产品UI部分的改善,原版本是MFC做的,我决定用WTL,于是就遇到自动完成控件的问题.遍 ...
- tomcat容器启动的启动过程(三)
Catalina的start方法 /** * Start a new server instance. */ public void start() { if (server == null) { l ...
- Linux系统安装建议
1.推荐使用CentOS-6.x 64位版本:2.分区,推荐分出/usr/local用来存放应用程序./data分区用来存放数据,具体分区建议如下:/boot 100Mswap 4096M (视内存大 ...
- AVFoundation下的视频分帧处理
// // ViewController.m // VideoFrame // // Created by wiseman on 16/1/27. // Copyright (c) 2016年 wis ...
- ControlTemple样式
1.TextBox 样式 1.1 style <Window.Resources> <Style x:Key="aa" TargetType="{x:T ...
- 711B - Chris and Magic Square 模拟
题目大意:在num[i][j]==0处填一个数使每行,每列,对角线的和相同,若果有多种答案输出一种. 题目思路:模拟 #include<iostream> #include<algo ...
- Controller <-> View 一般视图层级
关于 self.navigationController.view 相信看过 MBProgressHUD 官方例子 HudDemo 代码的同学应该看到过下述代码: 1 HUD = [[MBProgre ...
- linux设置时间服务器
对多个linux服务器,时间保持一致是很必要的.根据精确度要求,应该有相应的时间间隔进行时间同步.如果不进行时间同步,时间久了就会差别很大,遇到问题时定位就很困难.因为多台设备的配合,log之间可能有 ...