2019独角兽企业重金招聘Python工程师标准>>>

最近在做电商APP,实现购物车功能,按照要求需点击加减改变数量,计算每条数据的小计,及计算全部数据总价。之前都是使用SQLite保存数据,实现起来逻辑处理很麻烦。今天利用下班时间研究了下,写了个Demo实现了想要的功能。下面贴出主要代码,请大家批评指导。

百度网盘分享地址:http://pan.baidu.com/s/1gdw6gz5

MainActivity.java

package com.srain.activity;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;import com.srain.listviewdemo.R;
import com.srain.adapter.ListViewAdapter;public class MainActivity extends Activity {private List<Map<String, Object>> mData;private ListView listview;private ListViewAdapter adapter;private TextView tvAmount;private double amount = 0;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView() {mData = getData();tvAmount = (TextView) findViewById(R.id.tv_amount);listview = (ListView) findViewById(R.id.listleft);adapter = new ListViewAdapter(this, mLeftListOnItemClick, mData);listview.setAdapter(adapter);listview.setOnItemClickListener(mLeftListOnItemClick);tvAmount.setText("" + amount);TextView tvSub = (TextView) findViewById(R.id.tv_sub);tvSub.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {for (Map<String, Object> map : mData) {Log.e("count", map.get("count").toString());}}});// setlistViewLeft.setChoiceMode(ListView.CHOICE_MODE_SINGLE);// setlistViewLeft.setItemChecked(0, true);// setlistViewLeft.setSelection(0);}private List<Map<String, Object>> getData() {amount = 0;List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();Map<String, Object> map = new HashMap<String, Object>();map.put("price", 12);map.put("count", 2);list.add(map);map = new HashMap<String, Object>();map.put("price", 150);map.put("count", 3);list.add(map);map = new HashMap<String, Object>();map.put("price", 120);map.put("count", 8);list.add(map);map = new HashMap<String, Object>();map.put("price", 112);map.put("count", 6);list.add(map);map = new HashMap<String, Object>();map.put("price", 102);map.put("count", 6);list.add(map);// for (Map<String, Object> pram : list) {// int count = Integer.valueOf(pram.get("count").toString());// double price = Double.valueOf(pram.get("price").toString());// double sub = count * price;// amount = amount + sub;// }for (int i = 0; i < list.size(); i++) {Map<String, Object> pram = list.get(i);int count = Integer.valueOf(pram.get("count").toString());double price = Double.valueOf(pram.get("price").toString());double sub = count * price;amount = amount + sub;Log.e("amount", "amount" + amount + "sub" + sub + "i" + i);}return list;}public class MyListener implements View.OnClickListener {private TextView tvcount;private TextView tvsub;private int count;private double price;private int position;public MyListener() {}public MyListener(TextView tvcount, TextView tvsub, int count,double price, int position) {this.tvcount = tvcount;this.tvsub = tvsub;this.count = count;this.price = price;this.position = position;}@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.tv_add:count++;double subtotle = price * count;tvcount.setText("" + count);tvsub.setText("" + subtotle);amount += price;tvAmount.setText("" + amount);Map<String, Object> pram = mData.get(position);pram.put("price", price);pram.put("count", count);break;case R.id.tv_del:break;default:break;}}}// OnClickListener bPop = new OnClickListener() {// @Override// public void onClick(View v) {// for(int i=0;i<list.getCount();i++){// if(MyAdapter.isSelected.get(i)){// ViewHolder vHollder = (ViewHolder) list.getChildAt(i).getTag();// Log.i(TAG, "--onClick --"+vHollder.title.getText());// }// }// }// };AdapterView.OnItemClickListener mLeftListOnItemClick = new AdapterView.OnItemClickListener() {public void onItemClick(AdapterView<?> parent, View view, int position,long id) {Map<String, Object> map = mData.get(position);TextView tvadd = (TextView) view.findViewById(R.id.tv_add);TextView tvcount = (TextView) view.findViewById(R.id.tv_count);TextView tvsubtotal = (TextView) view.findViewById(R.id.tv_subtotal);int count = Integer.valueOf(map.get("count").toString());double price = Double.valueOf(map.get("price").toString());double subtotal = Double.valueOf(tvsubtotal.getText().toString());tvadd.setOnClickListener(new MyListener(tvcount, tvsubtotal, count,price, position));Intent intent = new Intent();intent.setClass(MainActivity.this, DetailActivity.class);startActivity(intent);// adapter.setSelectItem(position);// adapter.notifyDataSetInvalidated();// adapter.notifyDataSetChanged();}};}

ListViewAdapter.java

package com.srain.adapter;import java.util.List;
import java.util.Map;import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.TextView;import com.srain.listviewdemo.R;public class ListViewAdapter extends BaseAdapter {private LayoutInflater mInflater;private List<Map<String, Object>> mData;private OnItemClickListener listener;public ListViewAdapter(Context context, OnItemClickListener listener,List<Map<String, Object>> mData) {this.mData = mData;this.mInflater = LayoutInflater.from(context);this.listener = listener;}public int getCount() {return mData.size();}public Object getItem(int arg0) {return mData.get(arg0);}public long getItemId(int arg0) {return arg0;}public View getView(int position, View convertView, ViewGroup parent) {Map<String, Object> map = mData.get(position);ViewHolder holder = null;if (convertView == null) {holder = new ViewHolder();convertView = mInflater.inflate(R.layout.leftview, null);holder.tvadd = (TextView) convertView.findViewById(R.id.tv_add);holder.tvdel = (TextView) convertView.findViewById(R.id.tv_del);holder.tvConut = (TextView) convertView.findViewById(R.id.tv_count);holder.tvSubtotal = (TextView) convertView.findViewById(R.id.tv_subtotal);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}int count = Integer.valueOf(map.get("count").toString());double price = Double.valueOf(map.get("price").toString());holder.tvConut.setText(count + "");holder.tvSubtotal.setText(price * count + "");if (position == selectItem) {convertView.setBackgroundColor(Color.RED);} else {convertView.setBackgroundColor(Color.TRANSPARENT);}return convertView;}public void setSelectItem(int selectItem) {this.selectItem = selectItem;}private int selectItem = 0;public final class ViewHolder {public TextView tvadd;public TextView tvdel;public TextView tvConut;public TextView tvSubtotal;}
}

转载于:https://my.oschina.net/u/2320057/blog/392437

Android ListViewDemo相关推荐

  1. Android开源项目分类汇总-转载

    太长了,还是转载吧... 今天在看博客的时候,无意中发现了@Trinea在GitHub上的一个项目Android开源项目分类汇总,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有 ...

  2. Android开源项目分类汇总[转]

    Android开源项目分类汇总 如果你也对开源实现库的实现原理感兴趣,欢迎 Star 和 Fork Android优秀开源项目实现原理解析 欢迎加入 QQ 交流群:383537512(入群理由需要填写 ...

  3. android 开源收藏

    第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Pro ...

  4. android一些可用实例2014收藏

    目前包括: Android开源项目第一篇--个性化控件(View)篇 包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Pr ...

  5. 2016年GitHub上史上最全的Android开源项目分类汇总

    以下内容为转载 版主原网址 http://itindex.net/detail/51896-github-android-开源 GitHub上史上最全的Android开源项目分类汇总 今天在看博客的时 ...

  6. Android常用开源项目

    Android开源项目第一篇--个性化控件(View)篇   包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Progre ...

  7. Android 开源项目分类汇总 APP功能汇总

    Android 开源项目第一篇--个性化控件(View)篇   包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Progr ...

  8. Android UI + Function

    第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Pro ...

  9. Android UI个性style

    Android开源项目第一篇--个性化控件(View) ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar ...

最新文章

  1. 盘点2018十大科技丑闻,IT相关两项
  2. python学好了能干什么-Python语言能做什么,学好能干什么
  3. 实际开发什么场景用到线程池_线程池的具体业务场景分析
  4. IBM服务器显示系统恢复,苏州数据恢复_IBM X3850服务器数据恢复中处理SAS硬盘故障的恢复案例...
  5. matlab将满足某一条件的矩阵元素置零
  6. android4.0.3 修改启动动画和开机声音
  7. 辗转相除求最大公约数最小公倍数 扩展欧几里得算法
  8. 人才盘点最佳实践:45页人才盘点的流程与方法,管理梯队模型
  9. 如果地球突然停止转动,那么接下来会发生什么?
  10. 用SQL Server 2017图形数据库替换数据仓库中的桥表
  11. 谷雨钜献 | 用深度学习理解遥感图像,识别效率提升90倍,PaddlePaddle中科院遥感地球所...
  12. C语言中malloc,calloc,realloc,free的语法与作用
  13. 灰狼/狼群算法优化支持向量机SVM分类预测matlab代码,支持多分类。 Excel数据格式 ,直接运行 。
  14. java web课程设计目的_javaweb课程设计
  15. 大数据主要应用于哪些行业,应用价值是什么?
  16. 木门工厂木门、门套、套线公式和算法
  17. Linux之core dumped出错原因及位置分析
  18. Linux vi vim 宏 批量操作 重复操作 宏录制
  19. 美国H1B基本情况及相关数据
  20. linux安装maven并配置环境变量

热门文章

  1. JavaScript 入门基础 (八)
  2. WSS页面定制系列(2)---定制单个列表的表单页面
  3. c语言随机三位数,【分享代码】弥补c语言随机数不足
  4. WindowsPE 第七章 资源表
  5. POJ1149 PIGS(最大流)
  6. hdu1043 经典的八数码问题 逆向bfs打表 + 逆序数
  7. 【Flutter】Image 组件 ( 内存加载 Placeholder | transparent_image 透明图像插件 )
  8. 【Android 电量优化】电量优化 ( 充电状态获取 | 主动获取充电状态 | 广播接受者监听充电状态 | 被动获取充电状态 | 注册空广播接受者获取历史广播 )
  9. spotlight监控linux性能
  10. 子串在主机中出现的位置indexOf()--简单