实现了购物车的全选 全不选  选中删除   选中状态下数量添加时总价随之添加等基本功能。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

实现代码逻辑

import java.util.ArrayList;
import java.util.List; import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener
{ private static final int INITIALIZE = 0; private ListView mListView;// 列表 private ListAdapter mListAdapter;// adapter private List<DataBean> mListData = new ArrayList<DataBean>();// 数据 private boolean isBatchModel;// 是否可删除模式 private RelativeLayout mBottonLayout;
private CheckBox mCheckAll; // 全选 全不选 private TextView mEdit; // 切换到删除模式 private TextView mPriceAll; // 商品总价 private TextView mSelectNum; // 选中数量 private TextView mFavorite; // 移到收藏夹 private TextView mDelete; // 删除 结算 private int totalPrice = 0; // 商品总价
/** 批量模式下,用来记录当前选中状态 */
private SparseArray<Boolean> mSelectState = new SparseArray<Boolean>(); @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity); initView();
initListener();
loadData();
} private void doDelete(List<Integer> ids)
{
for (int i = 0; i < mListData.size(); i++)
{
long dataId = mListData.get(i).getId();
for (int j = 0; j < ids.size(); j++)
{
int deleteId = ids.get(j);
if (dataId == deleteId)
{
mListData.remove(i);
i--;
ids.remove(j);
j--;
}
}
} refreshListView();
mSelectState.clear();
totalPrice = 0;
mSelectNum.setText("已选" + 0 + "件商品");
mPriceAll.setText("¥" + 0.00 + "");
mCheckAll.setChecked(false); } private final List<Integer> getSelectedIds()
{
ArrayList<Integer> selectedIds = new ArrayList<Integer>();
for (int index = 0; index < mSelectState.size(); index++)
{
if (mSelectState.valueAt(index))
{
selectedIds.add(mSelectState.keyAt(index));
}
}
return selectedIds;
} private void initView()
{ mBottonLayout = (RelativeLayout) findViewById(R.id.cart_rl_allprie_total);
mCheckAll = (CheckBox) findViewById(R.id.check_box);
mEdit = (TextView) findViewById(R.id.subtitle);
mPriceAll = (TextView) findViewById(R.id.tv_cart_total);
mSelectNum = (TextView) findViewById(R.id.tv_cart_select_num);
mFavorite = (TextView) findViewById(R.id.tv_cart_move_favorite);
mDelete = (TextView) findViewById(R.id.tv_cart_buy_or_del);
mListView = (ListView) findViewById(R.id.listview);
mListView.setSelector(R.drawable.list_selector); } private void initListener()
{
mEdit.setOnClickListener(this);
mDelete.setOnClickListener(this);
mCheckAll.setOnClickListener(this); } private void loadData()
{
new LoadDataTask().execute(new Params(INITIALIZE));
} private void refreshListView()
{
if (mListAdapter == null)
{
mListAdapter = new ListAdapter();
mListView.setAdapter(mListAdapter);
mListView.setOnItemClickListener(mListAdapter); } else
{
mListAdapter.notifyDataSetChanged(); }
} private List<DataBean> getData()
{
int maxId = 0;
if (mListData != null && mListData.size() > 0)
maxId = mListData.get(mListData.size() - 1).getId();
List<DataBean> result = new ArrayList<DataBean>();
DataBean data = null;
for (int i = 0; i < 20; i++)
{
data = new DataBean();
data.setId(maxId + i + 1);// 从最大Id的下一个開始
data.setShopName("我的" + (maxId + 1 + i) + "店铺");
data.setContent("我的购物车里面的第" + (maxId + 1 + i) + "个商品");
data.setCarNum(1);
data.setPrice(305f);
result.add(data);
}
return result;
} class Params
{
int op; public Params(int op)
{
this.op = op;
} } class Result
{
int op;
List<DataBean> list;
} private class LoadDataTask extends AsyncTask<Params, Void, Result>
{
@Override
protected Result doInBackground(Params... params)
{
Params p = params[0];
Result result = new Result();
result.op = p.op;
try
{// 模拟耗时
Thread.sleep(500L);
} catch (InterruptedException e)
{
e.printStackTrace();
}
result.list = getData();
return result;
} @Override
protected void onPostExecute(Result result)
{
super.onPostExecute(result);
if (result.op == INITIALIZE)
{
mListData = result.list;
} else
{
mListData.addAll(result.list);
Toast.makeText(getApplicationContext(), "加入成功!", Toast.LENGTH_SHORT).show();
} refreshListView();
} } private class ListAdapter extends BaseAdapter implements OnItemClickListener
{ @Override
public int getCount()
{
return mListData.size();
} @Override
public Object getItem(int position)
{
return mListData.get(position);
} @Override
public long getItemId(int position)
{
return position;
} @Override
public View getView(final int position, View convertView, ViewGroup parent)
{
ViewHolder holder = null;
View view = convertView;
if (view == null)
{
view = LayoutInflater.from(MainActivity.this).inflate(R.layout.cart_list_item, null);
holder = new ViewHolder(view);
view.setTag(holder);
} else
{
holder = (ViewHolder) view.getTag();
} DataBean data = mListData.get(position);
bindListItem(holder, data);
holder.add.setOnClickListener(new OnClickListener()
{ @Override
public void onClick(View v)
{
// TODO Auto-generated method stub int _id = (int) mListData.get(position).getId(); boolean selected = mSelectState.get(_id, false); mListData.get(position).setCarNum(mListData.get(position).getCarNum() + 1); notifyDataSetChanged(); if (selected)
{
totalPrice += mListData.get(position).getPrice();
mPriceAll.setText("¥" + totalPrice + ""); } }
}); holder.red.setOnClickListener(new OnClickListener()
{ @Override
public void onClick(View v)
{ // TODO Auto-generated method stub
if (mListData.get(position).getCarNum() == 1)
return; int _id = (int) mListData.get(position).getId(); boolean selected = mSelectState.get(_id, false);
mListData.get(position).setCarNum(mListData.get(position).getCarNum() - 1);
notifyDataSetChanged(); if (selected)
{
totalPrice -= mListData.get(position).getPrice();
mPriceAll.setText("¥" + totalPrice + ""); } }
});
return view;
} private void bindListItem(ViewHolder holder, DataBean data)
{ holder.shopName.setText(data.getShopName());
holder.content.setText(data.getContent());
holder.price.setText("¥" + data.getPrice());
holder.carNum.setText(data.carNum + "");
int _id = data.getId(); boolean selected = mSelectState.get(_id, false);
holder.checkBox.setChecked(selected); } @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
DataBean bean = mListData.get(position); ViewHolder holder = (ViewHolder) view.getTag();
int _id = (int) bean.getId(); boolean selected = !mSelectState.get(_id, false);
holder.checkBox.toggle();
if (selected)
{
mSelectState.put(_id, true);
totalPrice += bean.getCarNum() * bean.getPrice();
} else
{
mSelectState.delete(_id);
totalPrice -= bean.getCarNum() * bean.getPrice();
}
mSelectNum.setText("已选" + mSelectState.size() + "件商品");
mPriceAll.setText("¥" + totalPrice + "");
if (mSelectState.size() == mListData.size())
{
mCheckAll.setChecked(true);
} else
{
mCheckAll.setChecked(false);
} } } class ViewHolder
{
CheckBox checkBox; ImageView image;
TextView shopName;
TextView content;
TextView carNum;
TextView price;
TextView add;
TextView red; public ViewHolder(View view)
{
checkBox = (CheckBox) view.findViewById(R.id.check_box);
shopName = (TextView) view.findViewById(R.id.tv_source_name);
image = (ImageView) view.findViewById(R.id.iv_adapter_list_pic);
content = (TextView) view.findViewById(R.id.tv_intro);
carNum = (TextView) view.findViewById(R.id.tv_num);
price = (TextView) view.findViewById(R.id.tv_price);
add = (TextView) view.findViewById(R.id.tv_add);
red = (TextView) view.findViewById(R.id.tv_reduce); }
} @Override
public void onClick(View v)
{
// TODO Auto-generated method stub
switch (v.getId())
{ case R.id.subtitle:
isBatchModel = !isBatchModel;
if (isBatchModel)
{
mEdit.setText(getResources().getString(R.string.menu_enter));
mDelete.setText(getResources().getString(R.string.menu_del));
mBottonLayout.setVisibility(View.GONE);
mFavorite.setVisibility(View.VISIBLE); } else
{
mEdit.setText(getResources().getString(R.string.menu_edit)); mFavorite.setVisibility(View.GONE);
mBottonLayout.setVisibility(View.VISIBLE);
mDelete.setText(getResources().getString(R.string.menu_sett));
} break; case R.id.check_box:
if (mCheckAll.isChecked())
{ totalPrice = 0;
if (mListData != null)
{
mSelectState.clear();
int size = mListData.size();
if (size == 0)
{
return;
}
for (int i = 0; i < size; i++)
{
int _id = (int) mListData.get(i).getId();
mSelectState.put(_id, true);
totalPrice += mListData.get(i).getCarNum() * mListData.get(i).getPrice();
}
refreshListView();
mPriceAll.setText("¥" + totalPrice + "");
mSelectNum.setText("已选" + mSelectState.size() + "件商品"); }
} else
{
if (mListAdapter != null)
{
totalPrice = 0;
mSelectState.clear();
refreshListView();
mPriceAll.setText("¥" + 0.00 + "");
mSelectNum.setText("已选" + 0 + "件商品"); }
}
break; case R.id.tv_cart_buy_or_del:
if (isBatchModel)
{
List<Integer> ids = getSelectedIds();
doDelete(ids);
} else
{
Toast.makeText(getApplicationContext(), "结算", 0).show();
} break; default:
break;
}
} }

源代码下载

Android 购物车的实现的更多相关文章

  1. Android 购物车功能的实现

    首先,众所周知,ListView是Android最常用的控件,可以说是最简单的控件,也可以说是最复杂的控件. 作为一个Android初级开发者,可能会简单的ListView展示图文信息. 作为一个有一 ...

  2. Android购物车的实现,仿淘宝天猫京东等APP。处理RecyclerView或listview中的选中事件;

    很久之前的代码了,拉出来晾晾! 购物车大致思路: 分为:商品.店铺.全选: 商品全部选中后--店铺自动选中:商品未全部选中(若有一个商品未选中)--店铺不选中. 店铺全部选中后--全选自动选中:店铺未 ...

  3. android购物车遇到的问题

    近期 做购物车的时候 ,遇到几个问题.如今 总结例如以下: 1:不让listview复用组件(购物车.或者有特殊操作的时候): 自己保存全部的view对象 public View getView(fi ...

  4. Android项目实战(十):自定义倒计时的TextView

    项目总结 -------------------------------------------------------------------------------------------- 有这 ...

  5. 【转】Android 实现蘑菇街购物车动画效果

    原文出处:http://blog.csdn.net/wangjinyu501/article/details/38400479 1.思路   目前想到两种方式实现这种效果,一是使用Tween动画,直截 ...

  6. Android 实现蘑菇街购物车动画效果

    版本号:1.0  日期:2014.8.6 版权:© 2014 kince 转载注明出处   使用过蘑菇街的用户基本上都知道有一个增加购物车的动画效果,此处不详细描写叙述想知道的能够去下载体验一下. 1 ...

  7. Android中购物车的全选、反选、问题和计算价格

    此Demo主要解决的是购物车中的全选,反选计算价格和选中的条目个数的问题,当选中几条时,点击反选,会把当先选中的变为不选中,把不选中的变为选中.点击全选会全部选中,再次点击时,变为全部不选中. //- ...

  8. Android -- 贝塞尔二阶实现饿了么加入购物车效果

    1,上周我们实现了简单的三阶贝塞尔曲线效果实例,今天是使用二阶贝塞尔曲线加动画实现的加入购物车效果,在码代码过程中出现了些问题,过一下和大家来探讨探讨,先看一下效果图 2,从上面的效果来看我们基本上可 ...

  9. Android实现购物车功能

    如图: 主要代码如下: actvity中的代码: publicclassShoppingCartActivity extendsBaseActivity {      private List< ...

随机推荐

  1. JVM运行原理详解

    1.JVM简析:      作为一名Java使用者,掌握JVM的体系结构也是很有必要的.      说起Java,我们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Ja ...

  2. 原生ajax的请求过程

    原生ajax的请求过程 创建全平台兼容的XMLHttpRequest对象: function getXHR(){ var xhr = null; if(window.XMLHttpRequest) { ...

  3. js常用事件及事件对象

  4. jquery-fakeloader插件的使用

    jquery-fakeloader插件示例代码 link rel="stylesheet" href="../../Content/fakeLoader.css" ...

  5. POJ——T1125 Stockbroker Grapevine

    http://poj.org/problem?id=1125 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36045   ...

  6. 在MAC下怎样用SSH连接远程LINUXserver

    首页,打开MAC的命令终端,检查是不是用root用的登录的,假设不是的话请输入命令:sudo -i切换到root. 然后,输入:ssh ip地址,假设主机存在的话会提示你输入password,输入正确 ...

  7. Linux内核中进程上下文和中断上下文的理解

    參考: http://www.embedu.org/Column/Column240.htm http://www.cnblogs.com/Anker/p/3269106.html 首先明白一个概念: ...

  8. iOS开发之十万个为什么&lt;1&gt;

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助.欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...

  9. Swift 3.0 (二)

    一:函数 1.1无参数无返回值的简单函数 func sendMessage(){ let message = "Hey, Guys!" print(message) } sendM ...

  10. iOS声明变量详解

    内容概述: 本文主要讲述了ios中多种声明变量方式的区别与联系,以及@interface声明的成员变量与@property属性的差异.最后介绍了推荐的声明方式. atany原创,转载请注明博主与博文链 ...