Androidはカートの加減器を実現
57709 ワード
public class MainActivity extends AppCompatActivity implements CartAdapter.RefreshPriceInterface,View.OnClickListener{
private ListView listView;
private CheckBox cb_check_all;
private TextView tv_total_price;
private TextView tv_delete;
private TextView tv_go_to_pay;
private CartAdapter adapter;
private double totalPrice = 0.00;
private int totalCount = 0;
private List> goodsList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initDate();
}
//
private void priceControl(Map pitchOnMap){
totalCount = 0;
totalPrice = 0.00;
for(int i=0;i<goodsList.size();i++){
if(pitchOnMap.get(goodsList.get(i).get("id"))==1){
totalCount=totalCount+Integer.valueOf(goodsList.get(i).get("count"));
double goodsPrice=Integer.valueOf(goodsList.get(i).get("count"))*Double.valueOf(goodsList.get(i).get("price"));
totalPrice=totalPrice+goodsPrice;
}
}
tv_total_price.setText("¥ "+totalPrice);
tv_go_to_pay.setText(" ("+totalCount+")");
}
@Override
public void refreshPrice(Map pitchOnMap) {
priceControl(pitchOnMap);
}
@Override
public void onClick(View view) {
switch (view.getId()){
//
case R.id.all_chekbox:
AllTheSelected();
break;
case R.id.tv_go_to_pay:
if(totalCount<=0){
Toast.makeText(this," ~",Toast.LENGTH_SHORT).show();
Intent in=new Intent(this,TwoActivity.class);
startActivity(in);
return;
}
Toast.makeText(this," ~",Toast.LENGTH_SHORT).show();
break;
case R.id.tv_delete:
if(totalCount<=0){
Toast.makeText(this," ~",Toast.LENGTH_SHORT).show();
return;
}
checkDelete(adapter.getPitchOnMap());
break;
}
}
//
private void checkDelete(Map map){
List> waitDeleteList=new ArrayList<>();
Map waitDeleteMap =new HashMap<>();
for(int i=0;i<goodsList.size();i++){
if(map.get(goodsList.get(i).get("id"))==1){
waitDeleteList.add(goodsList.get(i));
waitDeleteMap.put(goodsList.get(i).get("id"),map.get(goodsList.get(i).get("id")));
}
}
goodsList.removeAll(waitDeleteList);
map.remove(waitDeleteMap);
priceControl(map);
adapter.notifyDataSetChanged();
}
//
private void AllTheSelected(){
Map map=adapter.getPitchOnMap();
boolean isCheck=false;
boolean isUnCheck=false;
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
if(Integer.valueOf(entry.getValue().toString())==1)isCheck=true;
else isUnCheck=true;
}
if(isCheck==true&&isUnCheck==false){// ,
for(int i=0;i<goodsList.size();i++){
map.put(goodsList.get(i).get("id"),0);
}
cb_check_all.setChecked(false);
}else if(isCheck==true && isUnCheck==true){// ,
for(int i=0;i<goodsList.size();i++){
map.put(goodsList.get(i).get("id"),1);
}
cb_check_all.setChecked(true);
}else if(isCheck==false && isUnCheck==true){// ,
for(int i=0;i<goodsList.size();i++){
map.put(goodsList.get(i).get("id"),1);
}
cb_check_all.setChecked(true);
}
priceControl(map);
adapter.setPitchOnMap(map);
adapter.notifyDataSetChanged();
}
private void initView(){
// listView = (ListView) findViewById(R.id.listview);
cb_check_all = (CheckBox) findViewById(R.id.all_chekbox);
tv_total_price = (TextView) findViewById(R.id.tv_total_price);
tv_delete = (TextView) findViewById(R.id.tv_delete);
tv_go_to_pay = (TextView) findViewById(R.id.tv_go_to_pay);
tv_go_to_pay.setOnClickListener(this);
tv_delete.setOnClickListener(this);
cb_check_all.setOnClickListener(this);
adapter=new CartAdapter(this,goodsList);
adapter.setRefreshPriceInterface(this);
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
private void initDate(){
goodsList=new ArrayList<>();
for(int i=0;i<10;i++){
HashMap map=new HashMap<>();
map.put("id",(new Random().nextInt(10000)%(10000-2900+2900) + 2900)+"");
map.put("name"," "+(i+1)+" ");
map.put("type",(i+20)+" ");
map.put("price",(new Random().nextInt(100)%(100-29+29) + 29)+"");
map.put("count",(new Random().nextInt(10)%(10-1+1) + 1)+"");
goodsList.add(map);
}
initView();
}
}
-------------------------------------------------------------------
main.xml
<LinearLayout
android:id="@+id/top_bar"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#E24146"
android:orientation="vertical" >
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:minHeight="48dp"
android:text=" "
android:textColor="#ffffff"
android:textSize="17sp" />
LinearLayout>
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:childIndicator="@null"
android:groupIndicator="@null" >
ListView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2.5"
android:gravity="center_vertical"
android:orientation="horizontal" >
<CheckBox
android:id="@+id/all_chekbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="4dp"
android:button="@drawable/check_box_bg"
android:gravity="center"
android:minHeight="64dp"
android:paddingLeft="10dp"
android:visibility="visible" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text=" :"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_total_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="¥0.00"
android:textColor="#E21918"
android:textSize="16sp"
android:textStyle="bold" />
LinearLayout>
<TextView
android:id="@+id/tv_delete"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:clickable="true"
android:gravity="center"
android:text=" "
android:textColor="#E21918" />
<TextView
android:id="@+id/tv_go_to_pay"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#E24146"
android:clickable="true"
android:gravity="center"
android:text=" (0)"
android:textColor="#FAFAFA" />
LinearLayout>
-----------------------------------------------------------------
-------------------------------------------------------------------public class CartAdapter extends BaseAdapter{ private Context context; private List
> dataList; private ViewHolder vh; private Map pitchOnMap; private RefreshPriceInterface refreshPriceInterface; public CartAdapter(Context context,List > list){ this.context=context; this.dataList=list; pitchOnMap=new HashMap<>(); for(int i=0;i<dataList.size();i++){ pitchOnMap.put(dataList.get(i).get("id"),0); } } @Override public View getView(final int position, View view, ViewGroup viewGroup) { vh=new ViewHolder(); if(view==null){ view= LayoutInflater.from(context).inflate(R.layout.item_shopcart_product,null); vh.checkBox=(CheckBox)view.findViewById(R.id.check_box); vh.icon=(ImageView)view.findViewById(R.id.iv_adapter_list_pic); vh.name=(TextView)view.findViewById(R.id.tv_goods_name); vh.price=(TextView)view.findViewById(R.id.tv_goods_price); vh.type=(TextView)view.findViewById(R.id.tv_type_size); vh.num=(TextView)view.findViewById(R.id.tv_num); vh.reduce=(TextView)view.findViewById(R.id.tv_reduce); vh.add=(TextView)view.findViewById(R.id.tv_add); view.setTag(vh); }else { vh=(ViewHolder)view.getTag(); } if(dataList.size()>0){ if(pitchOnMap.get(dataList.get(position).get("id"))==0)vh.checkBox.setChecked(false); else vh.checkBox.setChecked(true); HashMap map=dataList.get(position); vh.name.setText(map.get("name")); vh.num.setText(map.get("count")); vh.type.setText(map.get("type")); vh.price.setText("¥ "+(Double.valueOf(map.get("price")) * Integer.valueOf(map.get("count")))); vh.checkBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { final int index=position; if(((CheckBox)view).isChecked())pitchOnMap.put(dataList.get(index).get("id"),1);else pitchOnMap.put(dataList.get(index).get("id"),0); refreshPriceInterface.refreshPrice(pitchOnMap); } }); vh.reduce.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { final int index=position; dataList.get(index).put("count",(Integer.valueOf(dataList.get(index).get("count"))-1)+""); if(Integer.valueOf(dataList.get(index).get("count"))<=0){ // , remove, 1 String deID=dataList.get(index).get("id"); dataList.remove(index); pitchOnMap.remove(deID); } notifyDataSetChanged(); refreshPriceInterface.refreshPrice(pitchOnMap); } }); vh.add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { final int index=position; dataList.get(index).put("count",(Integer.valueOf(dataList.get(index).get("count"))+1)+""); if(Integer.valueOf(dataList.get(index).get("count"))>15){ //15 Toast.makeText(context," ~",Toast.LENGTH_SHORT).show(); return; } notifyDataSetChanged(); refreshPriceInterface.refreshPrice(pitchOnMap); } }); } return view; } public Map getPitchOnMap(){ return pitchOnMap; } public void setPitchOnMap(Map pitchOnMap){ this.pitchOnMap=new HashMap<>(); this.pitchOnMap.putAll(pitchOnMap); } public interface RefreshPriceInterface{ void refreshPrice(Map pitchOnMap); } public void setRefreshPriceInterface(RefreshPriceInterface refreshPriceInterface){ this.refreshPriceInterface=refreshPriceInterface; } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } @Override public int getCount() { if (dataList != null) { return dataList.size(); } else { return 0; } } class ViewHolder{ CheckBox checkBox; ImageView icon; TextView name,price,num,type,reduce,add; } }