欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2024-02-14 23:59:40
本文实例讲述了android编程实现仿美团或淘宝的多级分类菜单效果。分享给大家供大家参考,具体如下: 这里要实现的是诸如美团/淘宝/百度糯米 多级分类菜单效果。当分类数量...

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

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

首先上效果图:

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

主要代码:

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程序设计有所帮助。