前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自定义菜单的实现

自定义菜单的实现

作者头像
用户4458175
发布2020-02-12 16:40:26
5050
发布2020-02-12 16:40:26
举报
文章被收录于专栏:andy的小窝

gradle 引入

代码语言:javascript
复制
compile 'com.github.fg2q1q3q:DropDownMenu:1.1.1'
dorpmenu(修改过的部分类,增加了GirdLayout 的动态添加)
代码语言:javascript
复制
    private String headers[] = {"综合排序", "商品类别", "价格筛选"};
    private int[] types = new int[]{MyDropDownMenu.TYPE_LIST_CITY, MyDropDownMenu.TYPE_GRID, MyDropDownMenu.TYPE_CUSTOM};
    private String methods[] = {"综合排序", "按价格升序", "按价格降序", "按销量降序"};
    private String ages[] = {"更新时间", "最新更新", "综合排序"};
    private String constellations[] = {"全部类别"};
代码语言:javascript
复制
    //contentView 为下拉菜单的view
   contentView = getLayoutInflater().inflate(R.layout.contentview, null);
   dropDownMenu=(MyDropDownMenu) findViewById(R.id.dropDownMenu);
代码语言:javascript
复制
  dropDownMenu.addMenuSelectListener(new MyDropDownMenu.OnDefultMenuSelectListener() {
            @Override
            public void onSelectDefaultMenu(int index, int pos, String clickstr) {
                //index:点击的tab索引,pos:单项菜单中点击的位置索引,clickstr:点击位置的字符串
                //排序
                if (index == 0) {
                    if (pos == 0) {
                        type = "0";
                    } else if (pos == 1) {
                        type = "1";
                    } else if (pos == 2) {
                        type = "2";
                    } else if (pos == 3) {
                        type = "3";
                    } else {
                        type = "0";
                    }
                    page = 1;
                } 
            }
        });
 dropDownMenu.setDropDownMenu(Arrays.asList(headers), initViewData(), contentView);
代码语言:javascript
复制
    /**
     * 设置类型和数据源:
     * DropDownMenu.KEY对应类型(DropDownMenu中的常量,参考上述核心源码) 此处的MyDropDownMenu是上面下载的自定义的MyDropDownMenu
     * DropDownMenu.VALUE对应数据源:key不是TYPE_CUSTOM则传递string[],key是TYPE_CUSTOM类型则传递对应view
     */
    private List<HashMap<String, Object>> initViewData() {
        List<HashMap<String, Object>> viewDatas = new ArrayList<>();
        HashMap<String, Object> map;
        for (int i = 0; i < headers.length; i++) {
            map = new HashMap<String, Object>();
            map.put(MyDropDownMenu.KEY, types[i]);
            switch (types[i]) {
                case MyDropDownMenu.TYPE_LIST_CITY:
                    map.put(MyDropDownMenu.VALUE, methods);
                    map.put(MyDropDownMenu.SELECT_POSITION, 0);
                    break;
                case MyDropDownMenu.TYPE_LIST_SIMPLE:
                    map.put(MyDropDownMenu.VALUE, ages);
                    map.put(MyDropDownMenu.SELECT_POSITION, 0);
                    break;
                case MyDropDownMenu.TYPE_GRID:
                    map.put(MyDropDownMenu.VALUE, constellations);
                    break;
                default:
                    map.put(MyDropDownMenu.VALUE, getCustomView());
                    break;
            }
            viewDatas.add(map);
        }
        return viewDatas;
    }
代码语言:javascript
复制
    private View getCustomView() {
        View v = getLayoutInflater().inflate(R.layout.custom, null);
        return v;
    }

针对Girdlayout 可以调用refreshGridItem来动态添加 GirdLayout 的内容。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档