utils工具包
用Map来盛装订单里所有商品对象的数据集合
package com.linyou.lifeservice.utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import android.os.Handler;
import android.widget.TextView;
import com.linyou.lifeservice.Constant;
import com.linyou.lifeservice.ceshi.p;
import com.linyou.lifeservice.entity.Goods;
//用Map来盛装订单里所有商品对象的数据集合
public class OrderUtil {
// private double totalPrice;
private Map<String,Goods> goodsMap; //商品的ID 和商品的键值对 对象集合
private static OrderUtil instance; //订单工具单例化
private static List<Handler> mHandlerList; //有一个静态集合专门用来存储Handler对象的
private OrderUtil()
{
goodsMap = new HashMap<String, Goods>();
mHandlerList = new ArrayList<Handler>();
}
public static OrderUtil getInstance() //订单工具单例化
{
if(null == instance){
instance = new OrderUtil();
}
return instance;
}
/*public void addGoods(Goods goods) //向订单里增加商品 这个在订单适配器中肯定有详细的用处
{
if (goodsMap.containsKey(goods.getId()))
{
//remove(goods);
}else{
double s = ArithUtil.mul(""+goods.getCount(), goods.getPrice());
goodsMap.put(goods.getId(),goods);
}
notifyDataChanged();
}*/
public void addGoods(Goods goods) //向订单里增加商品 这个在订单适配器中肯定有详细的用处
{
if (goodsMap.containsKey(goods.getId()))
{
remove(goods);
}
double s = ArithUtil.mul(""+goods.getCount(), goods.getPrice());
goodsMap.put(goods.getId(), goods);
notifyDataChanged();
}
public void remove(Goods goods)
{
double s = ArithUtil.mul(""+goods.getCount(), goods.getPrice());
goodsMap.remove(goods.getId());
notifyDataChanged();
}
public void updateGoodsList(List<Goods> list)
//修改订单,如果集合中包括该商品,则不添加,否则添加商品到集合中
{
String total = "0";
double total_ = 0;
for(Goods goods :list)
{
if(goodsMap.containsKey(goods.getId()))
{
continue;
}
else {
if (Integer.valueOf(goods.getId()) != 0) {
goodsMap.put(goods.getId(), goods);
//p.L("放入购物车的商品ID清单", goods.getId());
}
}
}
notifyDataChanged();
//p.L("放入购物车的商品清单goodsList", goodsMap.size()+"");
}
//将所有商品集合的值组成一个集合
public List<Goods> getGoodsList()
{
List<Goods> goodsList = new ArrayList<Goods>();
goodsList.addAll(goodsMap.values());
//notifyDataChanged();//这个是我后来加上去的
for (Goods g:goodsList){
//p.L("放入购物车的商品清单goodsList",goodsList.size()+" "+g.getName());
}
return goodsList;
}
//将一个handler注册进入本文的handler集合中
public void registerHandler(Handler mHandler)
{
mHandlerList.add(mHandler);
}
//获得商品总的价格
public String getTotalPrice()
{
List<Goods> goodsList = getGoodsList();
double total = 0.0;
for (Goods goods : goodsList)
{
//p.L("购物车内商品的清单列表",goods.toString());
double s = ArithUtil.mul(""+goods.getCount(), goods.getPrice());
total += s;
}
return ""+total;
}
//从handler集合中清除所有的handler
public void unRegisterHandler(Handler mHandler)
{
if(mHandlerList.contains(mHandler))
{
mHandlerList.remove(mHandler);
}
}
//将商品集合清空
public void clear()
{
goodsMap.clear();
notifyDataChanged();
}
//一个购买了多少件商品
public int getCount()
{
int count = 0;
List<Goods> goodsList = getGoodsList();
for (Goods goods : goodsList)
{
count += goods.getCount();
}
return count;
}
//这个方法就是工具类中每做一次更改 都要向主Activity页面发送一个信息
public void notifyDataChanged()
{
for(Handler mHandler:mHandlerList ){
mHandler.sendEmptyMessage(Constant.ORDER_CHANGED);
}
}
}
自己包装的MyToast类
package com.yikang.heartmark.util;
import android.content.Context;
import android.os.Handler;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.example.heartmark.R;
public class MyToast {
// ---------------------------------------自定义多次点击只显示一次的Toast------------------------------//
public static final int LENGTH_SHORT = android.widget.Toast.LENGTH_SHORT;
public static final int LENGTH_LONG = android.widget.Toast.LENGTH_LONG;
//这是系统的Toast
private static android.widget.Toast toast;
private static View toastRoot;
private static TextView tv;
// private static String oldMsg;
private static Handler handler = new Handler();
// 多线程任务
private static Runnable run = new Runnable() {
public void run() {
toast.cancel();
}
};
private static void toast(Context ctx, CharSequence msg, int duration) {
handler.removeCallbacks(run);
// handler的duration不能直接对应Toast的常量时长,在此针对Toast的常量相应定义时长
switch (duration) {
case LENGTH_SHORT:// Toast.LENGTH_SHORT值为0,对应的持续时间大概为1s
duration = 1000;
break;
case LENGTH_LONG:// Toast.LENGTH_LONG值为1,对应的持续时间大概为3s
duration = 3000;
break;
default:
break;
}
if (null != toast) {
// toast.setText(msg);//使用系统自带Toast
/**
* 为自定义Toast设置显示内容
*/
tv.setText(msg);
} else {
/**
* 初始化自定义toast
*/
toast = new Toast(ctx);
toastRoot = LayoutInflater.from(ctx).inflate(R.layout.toast_layout,
null);
tv = (TextView) toastRoot.findViewById(R.id.tv_toast_textShow);
tv.setText(msg);
toast.setDuration(duration);
toast.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM, 0, 180);
toast.setView(toastRoot);
}
handler.postDelayed(run, duration);
toast.show();
}
/**
* 弹出Toast
*
* @param ctx
* 弹出Toast的上下文
* @param msg
* 弹出Toast的内容
* @param duration
* 弹出Toast的持续时间
*/
public static void show(Context ctx, CharSequence msg, int duration)
throws NullPointerException {
if (null == ctx) {
throw new NullPointerException("The ctx is null!");
}
if (0 > duration) {
duration = LENGTH_SHORT;
}
toast(ctx, msg, duration);
}
/**
* 弹出Toast
*
* @param ctx
* 弹出Toast的上下文
* @param msg
* 弹出Toast的内容的资源ID
* @param duration
* 弹出Toast的持续时间
*/
public static void show(Context ctx, int resId, int duration)
throws NullPointerException {
if (null == ctx) {
throw new NullPointerException("The ctx is null!");
}
if (0 > duration) {
duration = LENGTH_SHORT;
}
toast(ctx, ctx.getResources().getString(resId), duration);
}
}
package com.yikang.heartmark.util;
import com.example.heartmark.R;
import com.yikang.heartmark.activity.YongYaoAddActivity;
import android.content.Context;
import android.widget.Toast;
// ShowUtil.showToast(YongYaoAddActivity.this, R.string.no_data); 测试语句
public class ShowUtil {
// 显示toast
public static void showToast(Context context, int value) {
MyToast.show(context, value, Toast.LENGTH_LONG);
}
public static void showToast(Context context, String value) {
MyToast.show(context, value, Toast.LENGTH_LONG);
}
}