Android编程实现仿美团或淘宝的多级分类菜单效果示例【附demo源码下载】

发布时间 - 2026-01-10 22:48:48    点击率:

本文实例讲述了Android编程实现仿美团或淘宝的多级分类菜单效果。分享给大家供大家参考,具体如下:

这里要实现的是诸如美团/淘宝/百度糯米 多级分类菜单效果。当分类数量非常多时可以考虑采用两级分类,而诸如美团这种表现方式是一个不错的选择。

首先上效果图:

 

主要代码:

1. PopupWindow初始化过程:

popupWindow = new PopupWindow(this);
View view = LayoutInflater.from(this).inflate(R.layout.popup_layout, null);
leftLV = (ListView) view.findViewById(R.id.pop_listview_left);
rightLV = (ListView) view.findViewById(R.id.pop_listview_right);
popupWindow.setContentView(view);
popupWindow.setBackgroundDrawable(new PaintDrawable());
popupWindow.setFocusable(true);
popupWindow.setHeight(ScreenUtils.getScreenH(this) * 2 / 3);
popupWindow.setWidth(ScreenUtils.getScreenW(this));
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
  @Override
  public void onDismiss() {
    darkView.startAnimation(animOut);
    darkView.setVisibility(View.GONE);
    leftLV.setSelection(0);
    rightLV.setSelection(0);
  }
});

2.左侧菜单点击事件:

//左侧ListView点击事件
leftLV.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    //二级数据
    List<SecondClassItem> list2 = firstList.get(position).getSecondList();
    //如果没有二级类,则直接跳转
    if (list2 == null || list2.size() == 0) {
      popupWindow.dismiss();
      int firstId = firstList.get(position).getId();
      String selectedName = firstList.get(position).getName();
      handleResult(firstId, -1, selectedName);
      return;
    }
    FirstClassAdapter adapter = (FirstClassAdapter) (parent.getAdapter());
    //如果上次点击的就是这一个item,则不进行任何操作
    if (adapter.getSelectedPosition() == position){
      return;
    }
    //根据左侧一级分类选中情况,更新背景色
    adapter.setSelectedPosition(position);
    adapter.notifyDataSetChanged();
    //显示右侧二级分类
    updateSecondListView(list2, secondAdapter);
  }
});

3. 右侧菜单点击事件:

//右侧ListView点击事件
rightLV.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    //关闭popupWindow,显示用户选择的分类
    popupWindow.dismiss();
    int firstPosition = firstAdapter.getSelectedPosition();
    int firstId = firstList.get(firstPosition).getId();
    int secondId = firstList.get(firstPosition).getSecondList().get(position).getId();
    String selectedName = firstList.get(firstPosition).getSecondList().get(position)
        .getName();
    handleResult(firstId, secondId, selectedName);
  }
});

4.顶部标签点击事件(即显示/隐藏 分类菜单)

if (popupWindow.isShowing()) {
  popupWindow.dismiss();
} else {
  popupWindow.showAsDropDown(findViewById(R.id.main_div_line));
  popupWindow.setAnimationStyle(-1);
  //背景变暗
  darkView.startAnimation(animIn);
  darkView.setVisibility(View.VISIBLE);
}

5.根据左侧点击,刷新右侧ListView

//刷新右侧ListView
private void updateSecondListView(List<SecondClassItem> list2,
    SecondClassAdapter secondAdapter) {
    secondList.clear();
    secondList.addAll(list2);
    secondAdapter.notifyDataSetChanged();
}

完整实例代码点击此处本站下载

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android布局layout技巧总结》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android操作json格式数据技巧总结》、《Android资源操作技巧汇总》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。


# Android  # 仿美团  # 淘宝  # 多级分类菜单  # Android自定义StepView仿外卖配送进度  # Android仿外卖购物车功能  # Android仿百度外卖自定义下拉刷新效果  # Android仿美团下拉菜单(商品选购)实例代码  # Android仿美团分类下拉菜单实例代码  # Android仿美团淘宝实现多级下拉列表菜单功能  # Android模仿美团顶部的滑动菜单实例代码  # 模仿美团点评的Android应用中价格和购买栏悬浮固定的效果  # Android使用RecyclerView仿美团分类界面  # Android仿美团外卖菜单界面  # 的是  # 是一个  # 进阶  # 操作技巧  # 这一  # 相关内容  # 感兴趣  # 给大家  # 如果没有  # 点击此处  # 跳转  # 更多关于  # 所述  # 两级  # 程序设计  # 背景色  # 变暗  # 讲述了  # setHeight 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何注册花生壳免费域名并搭建个人网站?  做企业网站制作流程,企业网站制作基本流程有哪些?  C语言设计一个闪闪的圣诞树  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  网站优化排名时,需要考虑哪些问题呢?  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  js实现点击每个li节点,都弹出其文本值及修改  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  长沙企业网站制作哪家好,长沙水业集团官方网站?  如何在万网主机上快速搭建网站?  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  常州企业网站制作公司,全国继续教育网怎么登录?  装修招标网站设计制作流程,装修招标流程?  Python并发异常传播_错误处理解析【教程】  利用JavaScript实现拖拽改变元素大小  如何用已有域名快速搭建网站?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  如何用腾讯建站主机快速创建免费网站?  深入理解Android中的xmlns:tools属性  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  使用C语言编写圣诞表白程序  Android自定义控件实现温度旋转按钮效果  活动邀请函制作网站有哪些,活动邀请函文案?  WordPress 子目录安装中正确处理脚本路径的完整指南  如何实现建站之星域名转发设置?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  Laravel如何使用Livewire构建动态组件?(入门代码)  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  再谈Python中的字符串与字符编码(推荐)  Laravel如何配置和使用缓存?(Redis代码示例)  详解CentOS6.5 安装 MySQL5.1.71的方法  网站制作企业,网站的banner和导航栏是指什么?  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  高防服务器租用指南:配置选择与快速部署攻略  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  php485函数参数是什么意思_php485各参数详细说明【介绍】  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  打开php文件提示内存不足_怎么调整php内存限制【解决方案】