Android Studio實(shí)現(xiàn)簡(jiǎn)單購(gòu)物車(chē)功能
本文實(shí)例為大家分享了Android Studio實(shí)現(xiàn)簡(jiǎn)單購(gòu)物車(chē)的具體代碼,供大家參考,具體內(nèi)容如下
MainActivity的布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<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="購(gòu)物車(chē)"
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: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="合計(jì):"
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: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:background="#a29e9e"
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>
條目的布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
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: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: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/ic_launcher"
/>
<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:text="商品"
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:textSize="14sp"
android:textStyle="bold"
android:text="價(jià)格"/>
<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: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:gravity="center"
android:background="#ccc"
android:text="一"
android:textSize="12sp" />
<TextView
android:id="@+id/tv_num"
android:layout_width="25dp"
android:layout_height="25dp"
android:gravity="center"
android:singleLine="true"
android:text="1"
android:textSize="12sp" />
<TextView
android:id="@+id/tv_add"
android:layout_width="25dp"
android:layout_height="25dp"
android:gravity="center"
android:text="十"
android:background="#ccc"
android:textSize="12sp" />
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
CartAdapter適配器
public class CaetAdapter extends BaseAdapter {
private Context context;
private List<HashMap<String, String>> list;
private HashMap<String, Integer> pitchOnMap;
public HashMap<String, Integer> getPitchOnMap() {
return pitchOnMap;
}
public void setPitchOnMap(HashMap<String, Integer> pitchOnMap) {
this.pitchOnMap = pitchOnMap;
}
public CaetAdapter(Context context, List<HashMap<String, String>> list) {
this.context = context;
this.list = list;
pitchOnMap = new HashMap<>();
for (int i = 0; i < list.size(); i++) {
pitchOnMap.put(list.get(i).get("id"), 0);
}
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
convertView = View.inflate(context, R.layout.item_layout, null);
final CheckBox checkBox;
ImageView icon;
final TextView name, price, num, type, reduce, add;
checkBox = convertView.findViewById(R.id.check_box);
icon = convertView.findViewById(R.id.iv_adapter_list_pic);
name = convertView.findViewById(R.id.tv_goods_name);
price = convertView.findViewById(R.id.tv_goods_price);
type = convertView.findViewById(R.id.tv_type_size);
num = convertView.findViewById(R.id.tv_num);
reduce = convertView.findViewById(R.id.tv_reduce);
add = convertView.findViewById(R.id.tv_add);
name.setText(list.get(position).get("name"));
price.setText("¥ " + (Integer.valueOf(list.get(position).get("price"))) * (Integer.valueOf(list.get(position).get("count"))));
type.setText(list.get(position).get("type"));
num.setText(list.get(position).get("count"));
if(pitchOnMap.get(list.get(position).get("id"))== 0){
checkBox.setChecked(false);
}else{
checkBox.setChecked(true);
}
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(checkBox.isChecked()){
pitchOnMap.put(list.get(position).get("id"),1);
}else{
pitchOnMap.put(list.get(position).get("id"), 0);
}
mrefreshPriceInterface.refreshPrice(pitchOnMap);
}
});
//商品數(shù)量減
reduce.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Integer.valueOf(list.get(position).get("count")) <= 1) {
Toast.makeText(context, "數(shù)量不能再減啦,只能刪除!", Toast.LENGTH_SHORT).show();
} else {
list.get(position).put("count", (Integer.valueOf(list.get(position).get("count")) - 1) + "");
notifyDataSetChanged();
}
mrefreshPriceInterface.refreshPrice(pitchOnMap);
}
});
//商品數(shù)量加
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
list.get(position).put("count", (Integer.valueOf(list.get(position).get("count")) + 1) + "");
notifyDataSetChanged();
mrefreshPriceInterface.refreshPrice(pitchOnMap);
}
});
return convertView;
}
/**
* 創(chuàng)建接口
*/
public interface RefreshPriceInterface {
/**
* 把價(jià)格展示到總價(jià)上
* @param pitchOnMap
*/
void refreshPrice(HashMap<String, Integer> pitchOnMap);
}
/**
* 定義一個(gè)接口對(duì)象
*/
private RefreshPriceInterface mrefreshPriceInterface;
/**
* 向外部暴露一個(gè)方法
* 把價(jià)格展示到總價(jià)上
* @param refreshPriceInterface
*/
public void setRefreshPriceInterface(RefreshPriceInterface refreshPriceInterface) {
mrefreshPriceInterface = refreshPriceInterface;
}
}
MainActivity
public class MainActivity extends AppCompatActivity implements View.OnClickListener,CaetAdapter.RefreshPriceInterface{
private LinearLayout top_bar;
private ListView listview;
private CheckBox all_chekbox;
private TextView price;
private TextView delete;
private TextView tv_go_to_pay;
private List<User> goodsList;
private UserDao userDao;
private List<HashMap<String,String>> listmap=new ArrayList<>();
private CaetAdapter adapter;
private double totalPrice = 0.00;
private int totalCount = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
top_bar = (LinearLayout) findViewById(R.id.top_bar);
listview = (ListView) findViewById(R.id.listview);
all_chekbox = (CheckBox) findViewById(R.id.all_chekbox);
price = (TextView) findViewById(R.id.tv_total_price);
delete = (TextView) findViewById(R.id.tv_delete);
tv_go_to_pay = (TextView) findViewById(R.id.tv_go_to_pay);
all_chekbox.setOnClickListener(this);
delete.setOnClickListener(this);
tv_go_to_pay.setOnClickListener(this);
initDate();
adapter = new CaetAdapter(MainActivity.this, listmap);
listview.setAdapter(adapter);
adapter.setRefreshPriceInterface(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.all_chekbox:
AllTheSelected();
break;
case R.id.tv_delete:
checkDelete(adapter.getPitchOnMap());
break;
case R.id.tv_go_to_pay:
if(totalCount<=0){
Toast.makeText(this,"請(qǐng)選擇要付款的商品~",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this,"付款成功",Toast.LENGTH_SHORT).show();
}
break;
}
}
/**
* 數(shù)據(jù)
*/
private void initDate() {
//創(chuàng)建集合
goodsList = new ArrayList<>();
//數(shù)據(jù)庫(kù)
userDao = Myapplication.getInstances().getDaoSession().getUserDao();
userDao.deleteAll();
//數(shù)據(jù)源
for (int i = 0; i < 10; i++) {
//向數(shù)據(jù)庫(kù)存放數(shù)據(jù)
User user = new User((long) i,
"購(gòu)物車(chē)?yán)锏牡? + (i + 1) + "件商品",
(i + 20) + "碼",
"10",
"10");
userDao.insert(user);
}
//從數(shù)據(jù)庫(kù)中把數(shù)據(jù)放到集合中
goodsList=userDao.loadAll();
//把結(jié)合中的數(shù)據(jù)放到HashMap集合中
for(int i=0;i<goodsList.size();i++){
HashMap<String,String> map=new HashMap<>();
map.put("id",goodsList.get(i).getId()+"");
map.put("name",goodsList.get(i).getName());
map.put("type",(goodsList.get(i).getType()));
map.put("price",goodsList.get(i).getPrice()+"");
map.put("count",goodsList.get(i).getCount()+"");
listmap.add(map);
}
}
@Override
public void refreshPrice(HashMap<String, Integer> pitchOnMap) {
priceControl(pitchOnMap);
}
/**
* 控制價(jià)格展示總價(jià)
*/
private void priceControl(Map<String, Integer> pitchOnMap){
totalCount = 0;
totalPrice = 0.00;
for(int i=0;i<listmap.size();i++){
if(pitchOnMap.get(listmap.get(i).get("id"))==1){
totalCount=totalCount+Integer.valueOf(listmap.get(i).get("count"));
double goodsPrice=Integer.valueOf(listmap.get(i).get("count"))*Double.valueOf(listmap.get(i).get("price"));
totalPrice=totalPrice+goodsPrice;
}
}
price.setText(" ¥ "+totalPrice);
tv_go_to_pay.setText("付款("+totalCount+")");
}
/**
* 刪除 控制價(jià)格展示總價(jià)
* @param map
*/
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<listmap.size();i++){
if(map.get(listmap.get(i).get("id"))==1){
waitDeleteList.add(listmap.get(i));
waitDeleteMap.put(listmap.get(i).get("id"),map.get(listmap.get(i).get("id")));
}
}
listmap.removeAll(waitDeleteList);
map.remove(waitDeleteMap);
priceControl(map);
adapter.notifyDataSetChanged();
}
/**
*全選或反選
*/
private void AllTheSelected(){
HashMap<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<listmap.size();i++){
map.put(listmap.get(i).get("id"),0);
}
all_chekbox.setChecked(false);
}else if(isCheck==true && isUnCheck==true){//部分選擇,做全選
for(int i=0;i<listmap.size();i++){
map.put(listmap.get(i).get("id"),1);
}
all_chekbox.setChecked(true);
}else if(isCheck==false && isUnCheck==true){//一個(gè)沒(méi)選,做全選
for(int i=0;i<listmap.size();i++){
map.put(listmap.get(i).get("id"),1);
}
all_chekbox.setChecked(true);
}
priceControl(map);
adapter.setPitchOnMap(map);
adapter.notifyDataSetChanged();
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android實(shí)現(xiàn)購(gòu)物車(chē)功能
- Android實(shí)現(xiàn)的仿淘寶購(gòu)物車(chē)demo示例
- Android實(shí)現(xiàn)仿淘寶購(gòu)物車(chē)增加和減少商品數(shù)量功能demo示例
- Android實(shí)現(xiàn)簡(jiǎn)單購(gòu)物車(chē)功能
- Android把商品添加到購(gòu)物車(chē)的動(dòng)畫(huà)效果(貝塞爾曲線(xiàn))
- Android實(shí)現(xiàn)商城購(gòu)物車(chē)功能的實(shí)例代碼
- Android中實(shí)現(xiàn)淘寶購(gòu)物車(chē)RecyclerView或LIstView的嵌套選擇的邏輯
- Android仿外賣(mài)購(gòu)物車(chē)功能
- Android實(shí)現(xiàn)添加商品到購(gòu)物車(chē)動(dòng)畫(huà)效果
- Android實(shí)現(xiàn)簡(jiǎn)單購(gòu)物車(chē)
相關(guān)文章
Android WiFi熱點(diǎn)開(kāi)發(fā)的示例代碼
這篇文章主要介紹了Android WiFi熱點(diǎn)開(kāi)發(fā)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Android中asset文件夾與raw文件夾的區(qū)別深入解析
本篇文章是對(duì)Android中的asset文件夾與raw文件夾區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
解決Android-RecyclerView列表倒計(jì)時(shí)錯(cuò)亂問(wèn)題
這篇文章主要介紹了解決Android-RecyclerView列表倒計(jì)時(shí)錯(cuò)亂問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
Android 自定義imageview實(shí)現(xiàn)圖片縮放實(shí)例詳解
這篇文章主要介紹了Android 自定義imageview實(shí)現(xiàn)圖片縮放實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04
android學(xué)習(xí)筆記之View的滑動(dòng)
Android開(kāi)發(fā)中我們常常需要View滑動(dòng)實(shí)現(xiàn)一些絢麗的效果來(lái)優(yōu)化用戶(hù)體驗(yàn),下面這篇文章主要給大家介紹了關(guān)于android學(xué)習(xí)筆記之View滑動(dòng)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01
Android音視頻之視頻采集(系統(tǒng)API預(yù)覽)
這篇文章主要為大家詳細(xì)介紹了Android音視頻之視頻采集,系統(tǒng)API預(yù)覽,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
Android使用RecyclerView實(shí)現(xiàn)列表數(shù)據(jù)選擇操作
這篇文章主要為大家詳細(xì)介紹了Android使用RecyclerView結(jié)合CheckBox實(shí)現(xiàn)列表數(shù)據(jù)選擇操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
Android自定義ViewGroup實(shí)現(xiàn)帶箭頭的圓角矩形菜單
這篇文章主要為大家詳細(xì)介紹了Android自定義ViewGroup帶箭頭的圓角矩形菜單實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07

