package cn.zengfansheng.lottery.view;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import org.apache.commons.lang3.StringUtils;
import android.content.Context;
import android.os.Bundle;
import android.text.Html;
import android.text.Spanned;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
import cn.zengfansheng.lottery.ConstantValue;
import cn.zengfansheng.lottery.GlobalParams;
import cn.zengfansheng.lottery.R;
import cn.zengfansheng.lottery.domain.ShoppingCart;
import cn.zengfansheng.lottery.domain.Ticket;
import cn.zengfansheng.lottery.util.PromptManager;
import cn.zengfansheng.lottery.view.manager.UIManager;
/**
* 购物车
*
* @author hacket
*/
public class ShoppingView extends BaseView {
public ShoppingView(Context context, Bundle bundle) {
super(context);
this.bundle = bundle;
}
@Override
protected void init() {
// 购物车布局
showView = (ViewGroup) View.inflate(context, R.layout.zl_shopping, null);
// 购物车组件初始化
initComponent();
// ListView初始化
setListView();
}
@Override
protected void setListener() {
// 设置监听
setComponentListener();
}
@Override
public int getViewId() {
return ConstantValue.VIEW_SHOPPINGCART;
}
@Override
public void onPause() {
super.onPause();
}
// note*********************0、功能列表*********************
// ①通用三步:布局,初始化,设置监听
// ②购物车信息展示
// ③添加自选、机选
// ④清空列表
// ⑤处理提示内容:TexeView(高亮处理)
// ⑥购买
// note*********************1-2、购物车组件的初始化*********************
private Button btnAddOptional;// 添加自选号
private Button btnAddRandom;// 添加机选号
private ImageButton ibShoppingListClear;// 清空列表
private TextView tvShoppingLotteryNotice;// 注数详细信息
private Button btnLotteryShoppingBuy;// 购买
/**
* 初始化购物车组件
*/
private void initComponent() {
// 1、自选号、机选号
btnAddOptional = (Button) findViewById(R.id.btn_add_optional);
btnAddRandom = (Button) findViewById(R.id.btn_add_random);
// 2、清空列表
ibShoppingListClear = (ImageButton) findViewById(R.id.ib_shopping_list_clear);
// 3、注数详细信息
tvShoppingLotteryNotice = (TextView) findViewById(R.id.tv_shopping_lottery_notice);
// 4、购买
btnLotteryShoppingBuy = (Button) findViewById(R.id.btn_lottery_shopping_buy);
}
// note*********************1-3设置监听*********************
/**
* 设置组件监听事件
*/
private void setComponentListener() {
btnAddOptional.setOnClickListener(this);
btnAddRandom.setOnClickListener(this);
ibShoppingListClear.setOnClickListener(this);
btnLotteryShoppingBuy.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_add_optional:// 自选票种注数
// 也就是后退键的功能
UIManager.getUiManager().history();
changeShoppingCartNotice();
break;
case R.id.btn_add_random:// 机选一注票种
addRandomTicket();
changeShoppingCartNotice();
break;
case R.id.ib_shopping_list_clear:// 清空购物车
clearTicketCart();
changeShoppingCartNotice();
break;
case R.id.btn_lottery_shopping_buy:// :购买
buyTicket();
break;
default:
break;
}
}
// note*********************2、购物车信息展示*********************
private ListView lvShoppingList;// 购物车listview
private ShopcartAdapter shopcartAdapter;// 购物车数据适配器
private List<Ticket> tickets;// 票信息
/**
* 购物车listview初始化
*/
public void setListView(){
lvShoppingList = (ListView) findViewById(R.id.lv_shopping_list);
tickets = ShoppingCart.getInstance().getTickets();
shopcartAdapter = new ShopcartAdapter();
lvShoppingList.setAdapter(shopcartAdapter);
}
/**
* 购物车数据适配器
*
* @author hacket
*/
private class ShopcartAdapter extends BaseAdapter {
@Override
public int getCount() {
if (tickets != null) {
return tickets.size();
}
return 0;
}
@Override
public Object getItem(int position) {
return tickets.get(position);// //
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
ViewHolder holder = null;
if (convertView==null) {
convertView = View.inflate(context, R.layout.zl_shopping_row, null);
holder = new ViewHolder();
// 条目删除图标
holder.ibItemDelete = (ImageButton) convertView.findViewById(R.id.ib_shopping_item_delete);
// 红色球
holder.tvItemRedBalls = (TextView) convertView.findViewById(R.id.tv_shopping_item_reds);
// 蓝色球
holder.tvItemBlueBall = (TextView) convertView.findViewById(R.id.tv_shopping_item_blues);
// 一注价格
holder.tvItemMoney = (TextView) convertView.findViewById(R.id.tv_shopping_item_money);
convertView.setTag(holder);// store data
} else {
holder = (ViewHolder) convertView.getTag();
}
// 红球
holder.tvItemRedBalls.setText(tickets.get(position).getRedBall());
// 蓝球
holder.tvItemBlueBall.setText(tickets.get(position).getBlueBall());
// 彩种的金额
int noteNum = tickets.get(position).getNoteNum();// 注数
holder.tvItemMoney.setText(noteNum + "注" + noteNum * 2 + "元");
// 设置监听-删除当前选中的注数条目
holder.ibItemDelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 移除当前列表的一条记录
tickets.remove(position);
// 更新adapter数据
shopcartAdapter.notifyDataSetChanged();
// 更新文本提示
changeShoppingCartNotice();
}
});
return convertView;
}
}
/**
* 购物车数据适配器的ViewHolder
*
* @author hacket
*/
private static class ViewHolder {
private ImageButton ibItemDelete;// 条目删除图标
private TextView tvItemRedBalls;// 红色球
private TextView tvItemBlueBall;// 蓝色球
private TextView tvItemMoney;// 一注价格
}
// note*********************3、添加自选、机选*********************
/**
* 机选票种
*/
private void addRandomTicket() {
// 机选红球
List<Integer> listRedSelected = new ArrayList<Integer>();
Random random = new Random();
while (listRedSelected.size() < 6) {
int redBall = random.nextInt(33) + 1;// 不包含0,所以要加1
if (listRedSelected.contains(redBall)) {// 如果包含了,那么continue
continue;
}
// 更新adapter
listRedSelected.add(redBall);
}
// 机选蓝球
List<Integer> listBlueSelected = new ArrayList<Integer>();
int blueBallNum = random.nextInt(16) + 1;// 不包含0,所以要加1
listBlueSelected.add(blueBallNum);
// 生成一注投注信息:封装到Ticket:红球、蓝球、注数
Ticket ticket = new Ticket();
// 3、封装成javabean(传递给购物车)
// 3-1存红球
StringBuffer sbRed = new StringBuffer();
for (Integer redNum : listRedSelected) {
// 诸如:[ 11 22 32 01 34 13 24]形式
sbRed.append(" ").append(redNum);
// 空格放前面,就可以不用考虑截取的end了
}
String redBall = sbRed.toString().substring(1);
ticket.setRedBall(redBall);
// 3-2存蓝球
StringBuffer sbBlue = new StringBuffer();
sbBlue.append(" ").append(listBlueSelected.get(0));
String blueBall = sbBlue.toString().substring(1);
ticket.setBlueBall(blueBall);
// 3-3存注数
ticket.setNoteNum(1);
// 4、将封装的结果添加到购物车中: List<Ticket>
// 由于购物车是公用的,所以内存中只有一份,所以用单例
ShoppingCart cart = ShoppingCart.getInstance();
cart.getTickets().add(ticket);
// 设置当前期次
cart.setIssue(bundle.getString("issue"));
// 设置当前彩种的id
cart.setLotteryId(ConstantValue.SSQ);
// 更新数据适配器
shopcartAdapter.notifyDataSetChanged();
}
// note*********************4、清空列表*********************
/**
* 清空购物车
*/
private void clearTicketCart() {
// 情况集合
ShoppingCart.getInstance().getTickets().clear();
// 更新adapter数据
shopcartAdapter.notifyDataSetChanged();
}
// note*********************5、处理提示内容:TexeView(高亮处理)*********************
// 界面切换过来的时候,更新提示内容文本
@Override
public void onResume() {
super.onResume();
changeShoppingCartNotice();
}
/**
* 处理提示内容
*/
public void changeShoppingCartNotice() {
int total = 0;
List<Ticket> tickets = ShoppingCart.getInstance().getTickets();
for (Ticket ticket : tickets) {
total += ticket.getNoteNum();
}
// 利用系统提供Html工具进行内容处理
// 将处理的结果交给TextView展示
// <![CDATA[注数: <font
// color="#ff0000">NUM</font> 注 金额: <font
// color="#ff0000">MONEY</font> 元]]>
String notice = context.getResources().getString(R.string.is_shopping_list_betting_num);
notice = StringUtils.replaceEach(notice, new String[]{"NUM","MONEY"}, new String[]{String.valueOf(total),String.valueOf(total*2)});
Spanned fromHtml = Html.fromHtml(notice);//public interface Spanned extends CharSequence
tvShoppingLotteryNotice.setText(fromHtml);
}
// note*********************6、购买*********************
/**
* 购买彩票
*/
private void buyTicket() {
// 1、是否选中了一注
// 2、是否登录
// 3、用户余额是否充足
if (ShoppingCart.getInstance().getTickets().size() > 0) { // 1-1、大于一注
// (判断:购物车集合的size)
if (GlobalParams.isLogin) {// 2-1、用户已经登录(判断:用户是否登录了)
if (GlobalParams.userBalance > Float.parseFloat(ShoppingCart //
.getInstance().getLotteryValue())) {// 3-1、余额大于所需要的资金(
// 判断:用户的余额是否满足投注的需求)
// TODO:追期和倍投
// 界面跳转:追期和倍投的设置界面
UIManager.getUiManager().changeView(PreBetView.class, bundle);
} else {// 3-2、余额小于所需要的资金
// 判断三:提示,界面跳转---充值界面
PromptManager.showToast(context, "余额不足");
}
} else {// 2-2、用户未登录,跳转到用户登录界面
// 判断二:提示,界面跳转---用户登录界面(①登录②获取余额)
PromptManager.showToast(context, "用户未登录");
UIManager.getUiManager().changeView(UserLogin.class, bundle);
// 进行登录操作,余额取出,验证用户登录(异步任务),
}
} else {// 1-2、小于一注
// 判断一:提示
PromptManager.showToast(context, "请选择一注");
}
}
}