最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android實現(xiàn)簡單購物車功能

 更新時間:2021年04月22日 15:47:28   作者:jie哈哈哈  
這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)二級列表購物車功能 ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Android實現(xiàn)購物車功能的具體代碼,供大家參考,具體內(nèi)容如下

MainActivity布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" >

  <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:checkMark="?android:attr/listChoiceIndicatorMultiple"
        android:gravity="center"
        android:minHeight="64dp"
        android:paddingLeft="10dp"
        android:textAppearance="?android:attr/textAppearanceLarge"
        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="@color/purple"
        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:background="@color/orange"
      android:clickable="true"
      android:gravity="center"
      android:text="刪除"
      android:textColor="#FAFAFA" />

    <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>

</LinearLayout>

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;

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<HashMap<String,String>> goodsList;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    initDate();
  }

  //控制價格展示
  private void priceControl(Map<String, Integer> 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<String, Integer> 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();
          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<String,Integer> map){
    List<HashMap<String,String>> waitDeleteList=new ArrayList<>();
    Map<String,Integer> 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<String,Integer> 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){//已經(jīng)全選,做反選
      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<String,String> map=new HashMap<>();
      map.put("id",(new Random().nextInt(10000)%(10000-2900+2900) + 2900)+"");
      map.put("name","購物車?yán)锏牡?+(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();
  }
}

CartAdapter布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="vertical" >

  <View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="#CCCCCC" />

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/page_backgroup"
    android:orientation="horizontal" >

    <CheckBox
      android:id="@+id/check_box"
      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:checkMark="?android:attr/listChoiceIndicatorMultiple"
      android:gravity="center"
      android:minHeight="64dp"
      android:minWidth="32dp"
      android:textAppearance="?android:attr/textAppearanceLarge"
      android:visibility="visible" />

    <ImageView
      android:id="@+id/iv_adapter_list_pic"
      android:layout_width="85dp"
      android:layout_height="85dp"
      android:layout_marginBottom="15dp"
      android:layout_marginTop="13dp"
      android:scaleType="centerCrop"
      android:src="@mipmap/good_icon" />

    <RelativeLayout
      android:layout_width="wrap_content"
      android:layout_height="match_parent"
      android:layout_gravity="center_vertical"
      android:layout_marginTop="10dp"
      android:layout_marginLeft="13dp" >

      <TextView
        android:id="@+id/tv_goods_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginRight="10dp"
        android:layout_marginTop="20dp"
        android:ellipsize="end"
        android:maxLines="2"
        android:textColor="@color/grey_color1"
        android:textSize="14sp" />

      <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="30dp"
        android:orientation="horizontal" >

        <TextView
          android:id="@+id/tv_goods_price"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_centerVertical="true"
          android:singleLine="true"
          android:textColor="@color/orange_color"
          android:textSize="14sp"
          android:textStyle="bold" />

        <TextView
          android:id="@+id/tv_type_size"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_centerVertical="true"
          android:layout_marginLeft="10dp"
          android:layout_toRightOf="@+id/tv_goods_price"
          android:singleLine="true"
          android:textColor="@color/grey_color3"
          android:textSize="10sp"/>

        <LinearLayout
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentRight="true"
          android:layout_centerVertical="true"
          android:layout_marginRight="15dp"
          android:orientation="horizontal" >

          <TextView
            android:id="@+id/tv_reduce"
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:background="@drawable/text_angle_gray"
            android:gravity="center"
            android:text="一"
            android:textColor="@color/grey_color1"
            android:textSize="12sp" />

          <TextView
            android:id="@+id/tv_num"
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:background="@drawable/text_angle"
            android:gravity="center"
            android:singleLine="true"
            android:text="1"
            android:textColor="@color/grey_color1"
            android:textSize="12sp" />

          <TextView
            android:id="@+id/tv_add"
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:background="@drawable/text_angle_right"
            android:gravity="center"
            android:text="+"
            android:textColor="@color/grey_color1"
            android:textSize="12sp" />
        </LinearLayout>
      </RelativeLayout>
    </RelativeLayout>
  </LinearLayout>

</LinearLayout>

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by lipeng
 * 2017/6/5.
 */

public class CartAdapter extends BaseAdapter {

  private Context context;
  private List<HashMap<String,String>> dataList;
  private ViewHolder vh;
  private Map<String,Integer> pitchOnMap;
  private RefreshPriceInterface refreshPriceInterface;

  public CartAdapter(Context context, List<HashMap<String,String>> 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_layout,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<String,String> 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,"已達(dá)庫存上限~",Toast.LENGTH_SHORT).show();
            return;
          }
          notifyDataSetChanged();
          refreshPriceInterface.refreshPrice(pitchOnMap);
        }
      });
    }

    return view;
  }

  public Map<String,Integer> getPitchOnMap(){
    return pitchOnMap;
  }
  public void setPitchOnMap(Map<String,Integer> pitchOnMap){
    this.pitchOnMap=new HashMap<>();
    this.pitchOnMap.putAll(pitchOnMap);
  }

  public interface RefreshPriceInterface{
    void refreshPrice(Map<String, Integer> 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;
  }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 安卓(Android)開發(fā)之自定義餅狀圖

    安卓(Android)開發(fā)之自定義餅狀圖

    餅狀圖制作起來其實很簡單,但是制作東西最重要的不是制作結(jié)果,而是制作思路。 相信小編貼上代碼大家一看就立刻明白了,下面咱們來了解一下制作思路。
    2016-08-08
  • Android實現(xiàn)簡單加法計算器

    Android實現(xiàn)簡單加法計算器

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)簡單加法計算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Android實現(xiàn)郵箱驗證功能

    Android實現(xiàn)郵箱驗證功能

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)郵箱驗證功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Android無需權(quán)限調(diào)起系統(tǒng)相機(jī)

    Android無需權(quán)限調(diào)起系統(tǒng)相機(jī)

    在進(jìn)行一些小型APP的開發(fā),或者是對拍照界面沒有自定義要求時,我們可以用調(diào)起系統(tǒng)相機(jī)的方式快速完成拍照需求
    2023-03-03
  • Android 7.0中拍照和圖片裁剪適配的問題詳解

    Android 7.0中拍照和圖片裁剪適配的問題詳解

    這篇文章主要介紹了Android 7.0中拍照和圖片裁剪適配的相關(guān)問題,文中通過示例代碼介紹的很詳細(xì),對大家具有一定的參考價值,有需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-02-02
  • Android RecyclerView實現(xiàn)數(shù)據(jù)列表展示效果

    Android RecyclerView實現(xiàn)數(shù)據(jù)列表展示效果

    這篇文章主要為大家詳細(xì)介紹了Android RecyclerView實現(xiàn)數(shù)據(jù)列表展示效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Android拍照上傳功能示例代碼

    Android拍照上傳功能示例代碼

    這篇文章主要介紹了Android拍照上傳功能用法,結(jié)合實例形式詳細(xì)分析了Android拍照上傳功能所涉及的相關(guān)知識點與功能實現(xiàn)技巧,需要的朋友可以參考下
    2016-08-08
  • Android 日期和時間的使用實例詳解

    Android 日期和時間的使用實例詳解

    這篇文章主要介紹了Android 日期和時間的使用實例詳解的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • Android文本視圖TextView實現(xiàn)跑馬燈效果

    Android文本視圖TextView實現(xiàn)跑馬燈效果

    這篇文章主要為大家詳細(xì)介紹了Android文本視圖TextView實現(xiàn)跑馬燈效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Flutter的鍵值存儲數(shù)據(jù)庫使用示例詳解

    Flutter的鍵值存儲數(shù)據(jù)庫使用示例詳解

    這篇文章主要為大家介紹了Flutter的鍵值存儲數(shù)據(jù)庫使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08

最新評論

漳平市| 漳州市| 望谟县| 松阳县| 嘉荫县| 山西省| 开远市| 清丰县| 平顶山市| 潼南县| 望奎县| 高阳县| 新兴县| 武强县| 桑植县| 富蕴县| 独山县| 朝阳市| 双牌县| 肥乡县| 霍邱县| 吴旗县| 涟水县| 清远市| 镇雄县| 东乌珠穆沁旗| 宣恩县| 香河县| 长丰县| 吉安市| 乐昌市| 祁连县| 长春市| 六安市| 休宁县| 胶南市| 石首市| 定西市| 太仓市| 巴林左旗| 含山县|