Android仿美团外卖点菜联动列表

本文介绍如何在Android中实现类似美团外卖的点菜联动ListView效果,包括ListView的使用、监听事件处理、简单动画及接口回调。通过设置ListView的点击事件和滚动监听,实现在右边列表滑动时更新左边分类信息。文章提供了关键代码示例,并讨论了购物车功能的实现,包括商品增删和购物车同步更新。最后分享了完整的源码供学习参考。
摘要由CSDN通过智能技术生成

Android高仿美团外卖点菜联动列表效果

最近项目中有一个添加购物车的需求,需要做成美团外卖点菜联动ListView的效果,可能有的朋友觉得这很简单,不就是2个Listview点击事件联动处理机制吗?没错,基本思路就是这样子,只是美团外卖点菜效果上有一种根据右边列表滑动可以监听到左边分类信息的变化状态。

可能言语上表达你们没法想象,先上一张效果图:

这里写图片描述

完成此效果需要掌握以下知识点:

  • ListView基本使用
  • ListView点击监听事件setOnItemClickListener和setOnScrollListener的了解掌握
  • 简单动画的技能(主要是点击添加复制一个图层进行抛物线落到购物车内)
  • 接口回调的基本使用

不多说了,直接上代码比较靠谱!
以下就是两个ListView最主要的两个监听,来实现美团外卖点菜效果。

//左边ListView的点击事件切换右边列表数据
left_listView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View view,
            int position, long arg3) {
        isScroll = false;

        for (int i = 0; i < left_listView.getChildCount(); i++) {
            if (i == position) {
                left_listView.getChildAt(i).setBackgroundColor(
                        Color.rgb(255, 255, 255));
            } else {
                left_listView.getChildAt(i).setBackgroundColor(
                        Color.TRANSPARENT);
            }
        }
        int rightSection = 0;
        for (int i = 0; i < position; i++) {
            rightSection += sectionedAdapter.getCountForSection(i) + 1;
        }
        right_listview.setSelection(rightSection);

    }

});
//右边ListView滑动位置来更新左边ListView分类信息的位置切换
right_listview.setOnScrollListener(new OnScrollListener() {
    @Override
    public void onScrollStateChanged(AbsListView arg0, int arg1) {
    }
    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {
        if (isScroll) {
            for (int i = 0; i < left_listView.getChildCount(); i++) {

                if (i == sectionedAdapter
                        .getSectionForPosition(firstVisibleItem)) {
                    left_listView.getChildAt(i).setBackgroundColor(
                            Color.rgb(255, 255, 255));
                } else {
                    left_listView.getChildAt(i).setBackgroundColor(
                            Color.TRANSPARENT);

                }
            }

        } else {
            isScroll = true;
        }
    }
});

其实代码很简单,看到上述2个ListView的监听事件后就能明白什么原理了。
1.左边ListView通过setOnItemClickListener点击item来切换更新右边列表数据
2.右边ListView通过setOnScrollListener滑动item来更新左边ListView列表
3.右边ListView的适配器需要大家注意一下:

下面主要实现购物车增加、删减商品功能

  • 自己定义2个接口onCallBackListener和ShopToDetailListener
  • onCallBackListener接口主要用于用户操作商品列表时增加和删减商品后对购物车商品价格以及数量的更新
    /**
     * Type表示添加或减少
     * @param product
     * @param type
     */
    void updateProduct(ShopProduct product, String type);
  • ShopToDetailListener接口主要用于用户操作购物车商品时,对商品列表进行更新和购物车商品数目为0时更新删除购物车该商品信息
    /**
     * Type表示添加或减少
     * @param product
     * @param type
     */
    void onUpdateDetailList(ShopProduct product, String type);
    /**
     * 删除购物车商品信息
     * @param product
     */
    void onRemovePriduct(ShopProduct product);

下面操作是界面右边ListView适配器Adapter中增加和减少商品的点击事件处理:

viewHolder.increase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int num = product.getNumber();
  • 16
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 26
    评论
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值