Android ExpandMenu 多级菜单

前言 ,诸如壹号店、同城、去哪等一系列O2O越来越火,他们的应用多级搜索 很是……


1,结构分析

首先,我们给出这个下来菜单需要的组建。我们用线框图来分析。


1)如上图所示,最外围的是一个Activity,顶部包含了一个View的容器,这个容器主要是装载ToggleButton来实现诸如美团里面的“美食,全城,理我最近,刷选”这一行。这一行一点就会弹出对应的下来菜单。

2)下拉菜单是如何实现的呢?,这里我们利用了PopupWindow来实现这一弹出式窗口。然后我们在弹出式窗口里面再定义我们的下来列表项,是单列还是二级菜单,都是由里面来定。

3)不同的菜单,需要一级或者需要二级,在这里根据我的需求而变动。我们在PopupWindow上面加一个自定义的LeftView,或者是MiddleView,RightView。主要是一个ToggleButton,你弹出一个窗口,你就定制一个窗口。

3)视图里面嵌入ListView,就形成了列表项。

好分析就到上面为止,接下来我们一步步的说明实现。

2,项目结构

本项目的项目结构如图所示:

1) Adapter。适配器,主要是为ListView提供数据适配的。

2)MainActivity。主活动页面。

3)ExpandTabView。本项目的核心类,它包含ToggleButton容器和PopupWindow,是控制弹出窗口的核心类。

4)ViewLeft,ViewMiddle,ViewRight。是弹出里面嵌套的类,实现不同的列表菜单。



3,MainActivity

承载所有元素。看代码比看文字实在。

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package com.example.expandtabview;  
  2.   
  3.   
  4. import java.util.ArrayList;  
  5.   
  6. import android.app.Activity;  
  7. import android.os.Bundle;  
  8. import android.util.Log;  
  9. import android.view.View;  
  10. import android.widget.Toast;  
  11.   
  12. import com.example.view.ExpandTabView;  
  13. import com.example.view.ViewLeft;  
  14. import com.example.view.ViewMiddle;  
  15. import com.example.view.ViewRight;  
  16.   
  17. public class MainActivity extends Activity {  
  18.     private static final String TAG = "MainActivity";  
  19.     private ExpandTabView expandTabView;  
  20.     private ArrayList<View> mViewArray = new ArrayList<View>();  
  21.     private ViewLeft viewLeft;  
  22.     private ViewMiddle viewMiddle;  
  23.     private ViewRight viewRight;  
  24.       
  25.     @Override  
  26.     protected void onCreate(Bundle savedInstanceState) {  
  27.           
  28.         super.onCreate(savedInstanceState);  
  29.         setContentView(R.layout.activity_main);  
  30.         initView();  
  31.         initVaule();  
  32.         initListener();  
  33.           
  34.     }  
  35.   
  36.     private void initView() {  
  37.         Log.d(TAG,"initView");  
  38.         expandTabView = (ExpandTabView) findViewById(R.id.expandtab_view);  
  39.         viewLeft = new ViewLeft(this);  
  40.         viewMiddle = new ViewMiddle(this);  
  41.         viewRight = new ViewRight(this);  
  42.           
  43.     }  
  44.   
  45.     private void initVaule() {  
  46.         Log.d(TAG,"initValue");  
  47.         mViewArray.add(viewLeft);  
  48.         mViewArray.add(viewMiddle);  
  49.         mViewArray.add(viewRight);  
  50.         ArrayList<String> mTextArray = new ArrayList<String>();  
  51.         mTextArray.add("距离");  
  52.         mTextArray.add("区域");  
  53.         mTextArray.add("距离");  
  54.         expandTabView.setValue(mTextArray, mViewArray);//将三个下拉列表设置进去  
  55.         expandTabView.setTitle(viewLeft.getShowText(), 0);  
  56.         expandTabView.setTitle(viewMiddle.getShowText(), 1);  
  57.         expandTabView.setTitle(viewRight.getShowText(), 2);  
  58.           
  59.     }  
  60.   
  61.     private void initListener() {  
  62.         Log.d(TAG,"initListener");  
  63.         viewLeft.setOnSelectListener(new ViewLeft.OnSelectListener() {  
  64.   
  65.             @Override  
  66.             public void getValue(String distance, String showText) {  
  67.                 Log.d("ViewLeft""OnSelectListener, getValue");  
  68.                 onRefresh(viewLeft, showText);  
  69.             }  
  70.         });  
  71.           
  72.         viewMiddle.setOnSelectListener(new ViewMiddle.OnSelectListener() {  
  73.               
  74.             @Override  
  75.             public void getValue(String showText) {  
  76.                 Log.d("ViewMiddle","OnSelectListener, getValue");  
  77.                 onRefresh(viewMiddle,showText);  
  78.                   
  79.             }  
  80.         });  
  81.           
  82.         viewRight.setOnSelectListener(new ViewRight.OnSelectListener() {  
  83.   
  84.             @Override  
  85.             public void getValue(String distance, String showText) {  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值