zoukankan      html  css  js  c++  java
  • 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();
        }

    源代码下载(免积分哦):

    http://download.csdn.net/detail/books1958/7992863      
       

  • 相关阅读:
    一些你可能用到的代码
    iOS 键盘下去的方法
    iOS设计模式汇总
    随笔
    Spring cloud config 分布式配置中心 (三) 总结
    Spring cloud config 分布式配置中心(二) 客户端
    Spring cloud config 分布式配置中心(一) 服务端
    jdbcUrl is required with driverClassName spring boot 2.0版本
    JpaRepository接口找不到 spring boot 项目
    解决IntelliJ “Initialization failed for 'https://start.spring.io'
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5220255.html
Copyright © 2011-2022 走看看