此Demo主要解决的是购物车中的全选,反选计算价格和选中的条目个数的问题,当选中几条时,点击反选,会把当先选中的变为不选中,把不选中的变为选中。点击全选会全部选中,再次点击时,变为全部不选中。
//-----------一下为main的布局-----------------------
<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" > <Button android:layout_width="0dp" android:layout_weight="1" android:layout_height="fill_parent" android:text="全选" android:gravity="center" android:id="@+id/bt_quanxuan"/> <Button android:layout_width="0dp" android:layout_weight="1" android:layout_height="fill_parent" android:text="反选" android:gravity="center" android:id="@+id/bt_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>
//-----------------一下为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="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <CheckBox android:layout_width="60dp" android:layout_height="wrap_content" android:gravity="center" android:id="@+id/cb_checkbox"/> <TextView android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:id="@+id/tv_title" android:textSize="20sp"/> <TextView android:layout_width="100dp" android:layout_height="wrap_content" android:id="@+id/tv_money" android:gravity="center"/> </LinearLayout></LinearLayout>
//------------------一下为bean包中封装的数据对象-----创建了一个News类-----------------------
package com.bwie.test;
public class News { private String title; private String money; private boolean flag; public News(String title, String money, boolean flag) { super(); this.title = title; this.money = money; this.flag = flag; } public News() { 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 "News [title=" + title + ", money=" + money + ", flag=" + flag + "]"; } }
//---------------一下是自定义的适配器-------MyAdapter-------------------------
package com.bwie.test;
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<News> news; private Context context; private static HashMap<Integer, Boolean> isSelected; private onCheckListener listener; private CheckBox check; public MyAdapter(List<News> news, Context context) { super(); this.news = news; this.context = context; isSelected = new HashMap<Integer, Boolean>(); for (int i = 0; i < news.size(); i++) { getIsSelected().put(i, false); } } @Override public int getCount() { // TODO Auto-generated method stub return news.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return news.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; News newss=news.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(newss.getTitle()); holder.money.setText(newss.getMoney()); holder.flag.setChecked(newss.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); } }
//--------------------------------------
//========================以下是MainActivity==========================================
package com.bwie.test;
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.bwie.test.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.Button;import android.widget.ListView;import android.widget.TextView;public class MainActivity extends Activity implements onCheckListener, OnClickListener { private String urlPath="http://172.17.29.120/localuser/loupengfei/kaoshi/shoppingcar.json"; private List<News> news=new ArrayList<News>(); private ArrayList<Shopbean> list; private int checkNum = 0; // 记录选中的条目数量 private float total = 0.00f; private Button bt_fanxuan; private Button bt_quanxuan; private MyAdapter adapter; private TextView tv_num; private TextView tv_zongjai; private ListView lv; private SharedPreferences sp; 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 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"); News newss=new News(title, money, false); news.add(newss); } //设置适配器 adapter = new MyAdapter(news, 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); //创建SharedPreferences sp = getSharedPreferences("kk", Context.MODE_PRIVATE); //找到控件 bt_fanxuan = (Button) findViewById(R.id.bt_fanxuan); bt_quanxuan = (Button) findViewById(R.id.bt_quanxuan); lv = (ListView) findViewById(R.id.lv); tv_num = (TextView) findViewById(R.id.tv_num); tv_zongjai = (TextView) findViewById(R.id.tv_zongjai); //获得数据 huodeshuju(); //设置监听 bt_fanxuan.setOnClickListener(this); bt_quanxuan.setOnClickListener(this); }//------------------------------------ //获得网络数据 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"); urlConnection.connect(); 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(); } @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(news.get(i).getMoney()); checkNum++; } } //更新显示数据 dataChanged(total); } 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 onClick(View v) { switch (v.getId()) { //全选 case R.id.bt_quanxuan: //去SharedPreferences中获得是否为全选状态,true为全选状态,false为不是全选状态 boolean kk=sp.getBoolean("kk", false); //为全选时,遍历设置为全不选 if (kk) { // 遍历list的长度,设为未选 for (int i = 0; i < news.size(); i++) { adapter.getIsSelected().put(i, false); checkNum=0;// 数量减1 total = 0.00f; } // 刷新listview和TextView的显示 dataChanged(total); //保存状态为全不选 Editor editor=sp.edit(); editor.putBoolean("kk", false); editor.commit(); }else{ // 当不是全选时,设置为全选 total = 0.00f; // 遍历list的长度,设为已选 checkNum = news.size(); for (int i = 0; i < news.size(); i++) { adapter.getIsSelected().put(i, true); total += Float.valueOf(news.get(i).getMoney()) ; } // 刷新listview和TextView的显示 dataChanged(total); //保存全选状态 Editor editor=sp.edit(); editor.putBoolean("kk", true); editor.commit(); } break; //反选 case R.id.bt_fanxuan: checkNum=0; //获得全选状态 boolean kkk=sp.getBoolean("kk", false); total=0; //为全选时,设置为全不选 if (kkk) { // 遍历list的长度,设为未选 for (int i = 0; i < news.size(); i++) { adapter.getIsSelected().put(i, false); checkNum=0;// 数量减1 total = 0.00f; } // 刷新listview和TextView的显示 dataChanged(total); Editor editor=sp.edit(); editor.putBoolean("kk", false); editor.commit(); }else{ //不为全选时,也就是有选中的,有没选中的 // 遍历list的长度,设为未选 for (int i = 0; i < news.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(news.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(news.get(i).getMoney()); Log.i("总价222:", total+""); checkNum++;// 数量减1 } } } // 刷新listview和TextView的显示 dataChanged(total); } break; default: break; } } }//==============以上是MainActivity==================完了,赶快试试吧============