Android毕设项目功能:商城列表与购物车展示(二)

在上一篇博客中,为大家展示了最终完成效果图,并且分析了界面之间的关系,以及每个界面布局结构中包含的控件信息,对于总体功能数据源进行了封装和介绍。并且重点说明了第一个界面商品分类界面的实现方法。在本篇博客中我们继续操作,完成具体分类的商品信息列表界面的展示。效果图如下:

Android毕设项目功能:商城列表与购物车展示(二)_第1张图片

需求分析:

此界面的布局结构为上中下结构,可使用线性布局进行排列,上半部分为标题栏,左右两个图标都具备点击功能,左边点击后可退出当前界面,返回上一级界面,右面购物车图片点击后跳转到购物车界面操作。中间部分为可输入框EditText和搜索文本,下面为展示商品信息的ListView列表。故布局代码如下:



    
        
        

        
    
    
        
        
    
    

然后绘制ListView当中的item的布局,这里需要一个可调控数量的组合控件,并不存在与android自带控件中,需要对于这个控件封装,这里使用了Android自定义控件之购物车数量加减器提供的封装方式,写的非常详细!(*^▽^*)~~,具体的思路以及关于AmountView的介绍和代码,这里我就不赘述了,需要使用大家去查看。但是为了对于数量能够直观获取,在提供的AmountView当中,我又增加了两个方法:

/*  获取EditText的内容*/
    public String getAmountText(){
        String s = etAmount.getText().toString().trim();
        return s;
    }
    /*为EditText设置内容*/
    public void setAmountText(int scount){
        amount = scount;
        etAmount.setText(amount+"");
    }

好了,接下来我直接把在布局中使用的代码贴出来。



    
    
    
    
    
    
    

上面布局的按钮部分,我在drawable文件夹当中对其进行了颜色切换的资源编写,文件为:but_button.xml,代码如下:



    
        
                     
                     
                     
                  
    
    
        
                     
                     
                     
                  
    

商品列表界面,对于布局结构的分析基本在上述介绍中已明确,下面我们开始对于逻辑进行分析,在java代码中体现出来,首先完成ListView的适配器代码部分:

package com.animee.day06.hw;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.animee.day06.R;
import com.squareup.picasso.Picasso;
import java.util.List;
public class DetailAdapter extends BaseAdapter{
    Context context;
    ListmDatas;
/*  通过构造方法,传入数据源和上下文对象*/
    public DetailAdapter(Context context, List mDatas) {
        this.context = context;
        this.mDatas = mDatas;
    }
    @Override
    public int getCount() {
        return mDatas.size();
    }
    @Override
    public Object getItem(int position) {
        return mDatas.get(position);
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = LayoutInflater.from(context).inflate(R.layout.item_detail_daily,null);
            holder.iv = convertView.findViewById(R.id.item_shop_iv);
            holder.titleTv = convertView.findViewById(R.id.item_shop_tv_title);
            holder.priceTv = convertView.findViewById(R.id.item_shop_tv_price);
            holder.kindTv = convertView.findViewById(R.id.item_shop_tv_kind);
            holder.amountView = convertView.findViewById(R.id.item_shop_av);
            holder.buyBtn = convertView.findViewById(R.id.item_detail_btn);
            convertView.setTag(holder);
        }else {
            holder = (ViewHolder) convertView.getTag();
        }
//        获取指定位置的数据
        final InfoBean infoBean = mDatas.get(position);
        holder.titleTv.setText(infoBean.getTitle());
        holder.priceTv.setText("¥"+infoBean.getPrice());
        holder.kindTv.setText(infoBean.getKind());
        Picasso.with(context).load(infoBean.getPic()).into(holder.iv);
        holder.amountView.setGoods_storage(infoBean.getCount());
//        检测数据变化
        holder.amountView.setOnAmountChangeListener(new AmountView.OnAmountChangeListener() {
            @Override
            public void onAmountChange(View view, int amount) {
            }
        });
//     为购买的商品设置点击按钮事件
        final ViewHolder finalHolder = holder;
        holder.buyBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String amountText = finalHolder.amountView.getAmountText();
                int count = Integer.parseInt(amountText);  //购买数量
                infoBean.setBuycount(count);
//                添加商品
                ContentDatas.buyList.add(infoBean);
            }
        });
        return convertView;
    }
    class ViewHolder{
        ImageView iv;
        TextView titleTv,kindTv,priceTv;
        Button buyBtn;
        AmountView amountView;
    }
}

适配器写好之后,可以将适配器设置给activity当中的ListView控件上,activity代码如下:

package com.animee.day06.hw;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.animee.day06.R;
import java.util.List;
public class DailyDetailActivity extends AppCompatActivity implements View.OnClickListener{
    private int pos;
    private List> allList;
    private List beanList;
    ImageView backIv,shopIv;
    ListView delv;
    TextView titleTv;
    private DetailAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_daily_detail);
        pos = getIntent().getIntExtra("pos",0);
        allList = ContentDatas.getAllList();   //全部数据源
//       ListView 数据源
        beanList = allList.get(pos);
//        标题
        String title = ContentDatas.dailyKindList.get(pos);
//        查找控件
        backIv = findViewById(R.id.detail_daily_back);
        shopIv = findViewById(R.id.detail_daily_shop);
        delv = findViewById(R.id.detail_daily_lv);
        titleTv = findViewById(R.id.detail_daily_title_tv);

        titleTv.setText(title);     //  设置标题
        backIv.setOnClickListener(this);   // 设置点击事件
        shopIv.setOnClickListener(this);
//        设置适配器
        adapter = new DetailAdapter(this, beanList);
        delv.setAdapter(adapter);
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.detail_daily_back:
                finish();
                break;
            case R.id.detail_daily_shop:
                Intent intent = new Intent(this, ShopActivity.class);
                startActivity(intent);
                break;
        }
    }
}

通过上一个界面传入的pos参数,获取上一个界面被点击的位置,然后去数据源中获取此位置的标题名和此类商品集合列表,作为ListView的数据源进行设置,点击购物车按钮后,将跳转到第三个界面ShopActivity,其基本代码和操作,我将在下一篇博客中进行分析编写,写到这里,前两个页面我们就完成了。加油!成功就在前方!

案例讲解代码下载地址:商城列表与购物车代码

你可能感兴趣的:(Android学习笔记)