安卓开发(列表类视图——GridView&对商城界面的优化)

布局界面代码:

适配器代码只需更改列表视图适配器中的:

convertView = LayoutInflater.from(mContext).inflate(R.layout.item_grid,null);

activity界面代码同前面的类似。

利用网格视图对商城界面进行优化。

需要更改的地方:

布局代码将滚动布局更改为下面的:

<GridView
            android:id="@+id/gv_channel"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:numColumns="2"/>

activity界面主要是对showGoods()方法的更改:

private void showGoods() {
        //商品条目是一个线性布局,设置布局的宽度为屏幕的一半
        int screenWidth = getResources().getDisplayMetrics().widthPixels;
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(screenWidth / 2, LinearLayout.LayoutParams.WRAP_CONTENT);
        List<GoodsInfo> list =  mDBHelper.queryAllGoodsInfo();

        GoodsAdapter adapter = new GoodsAdapter(this,list,this);

        gv_channel.setAdapter(adapter);
    }

整体来说主要是对适配器进行相关的配置:

public class GoodsAdapter extends BaseAdapter {
    private Context mContext;
    private List<GoodsInfo> mGoodsList;

    public GoodsAdapter(Context mContext, List<GoodsInfo> mGoodsList,AddCartListener mAddCartListener) {
        this.mContext = mContext;
        this.mGoodsList = mGoodsList;
        this.mAddCartListener = mAddCartListener;
    }

    @Override
    public int getCount() {
        return mGoodsList.size();
    }

    @Override
    public Object getItem(int position) {
        return mGoodsList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder;
        if(convertView == null){
            holder = new ViewHolder();
            convertView = LayoutInflater.from(mContext).inflate(R.layout.item_goods, null);
            holder.iv_thumb = convertView.findViewById(R.id.iv_thumb);
            holder.tv_name = convertView.findViewById(R.id.tv_name);
            holder.tv_price = convertView.findViewById(R.id.tv_price);
            holder.btn_add = convertView.findViewById(R.id.btn_add);
            convertView.setTag(holder);
        }else {
            holder = (ViewHolder) convertView.getTag();
        }

        GoodsInfo info = mGoodsList.get(position);
        //给空间设置值
        holder.iv_thumb.setImageURI(Uri.parse(info.picPath));
        holder.tv_name.setText(info.name);
        holder.tv_price.setText(String.valueOf(info.price));

        holder.btn_add.setOnClickListener(v -> {
            //addToCart(info.id,info.name);
            mAddCartListener.addToCart(info.id,info.name);

        });

        holder.iv_thumb.setOnClickListener(v -> {
            Intent intent = new Intent(mContext, ShoppingDetailActivity.class);
            intent.putExtra("goods_id",info.id);
            mContext.startActivity(intent);

        });

        return convertView;
    }

    private static class ViewHolder{
        public  ImageView iv_thumb;
        public  TextView tv_name;
        public TextView tv_price;
        public Button btn_add;
    }

   //声明一个加入购物车的监听器对象
    private  AddCartListener mAddCartListener;

    //定义一个加入购物车的监听器接口
    public interface AddCartListener{
        void addToCart(int goods_id,String name);
    }
}

在这个适配器中要特别注意:

        因为要在适配器里面调用activity界面的addToCart()方法,为了使代码更规范,就在适配器中定义了一个接口,里面有一个抽象方法。在activity界面声明适配器对象时第三个参数传的是this,那么就表明该activity实现适配器结构中的那个抽象方法。那么,在适配器中,就可以通过声明的那个购物车的监听器的对象(mAddCartListener)调用该activity实现的接口中的addToCart()方法。注意,这个对象(mAddCartListener)是在构造方法中传递的。

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值