Android编程实现仿美团或淘宝的多级分类菜单效果示例【附demo源码下载】
程序员文章站
2023-12-20 11:20:40
本文实例讲述了android编程实现仿美团或淘宝的多级分类菜单效果。分享给大家供大家参考,具体如下:
这里要实现的是诸如美团/淘宝/百度糯米 多级分类菜单效果。当分类数量...
本文实例讲述了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程序设计有所帮助。