美文网首页
06 | Android 项目笔记 实现下拉三级联动菜单选择

06 | Android 项目笔记 实现下拉三级联动菜单选择

作者: itkluo88 | 来源:发表于2018-11-29 17:32 被阅读117次

    最近要实现一个点下拉分类筛选菜单,  选全国区域联动,  这里数据时参照网上本地存放省市区数据库.

     由于项目实际要满足从接口异步获取,  所以整体采用MVP做了小拆分.  自定义的级联菜单CascadingMenuView作为VIew, 外部传入处理逻辑的presenter,  为了简化, 这里的请求也放presenter中没抽出model

MVP的契约类

~~~

public interface CascadingMenuContract {

interface View {

void setFirstMenuList(List menuList, int selectPosition);

void setSecondMenuList(List menuList);

void setThirdMenuList(List menuList);

    }

interface Presenter {

void setView(CascadingMenuContract.View view);

        /**

        * 开始获取数据

        */

        void start();

        //    /**

//    * 第一级菜单数据

//    *

//    * @return

//    */

//    void requestFirstItem();

        /**

        * 第二级菜单数据

        *

        * @param parentMenuData

        */

        void requestSecondMenuList(MenuData parentMenuData);

        /**

        * 第三极菜单数据

        *

        * @param parentMenuData

        */

        void requestThirdMenuList(MenuData parentMenuData);

    }

}

~~~

最终实现效果如下

看下使用

1. 用Fragment做整个弹窗的容器,  布局如下

~~~

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:background="@color/half_transparent"

    android:orientation="vertical">

        android:id="@+id/cascadingMenuView"

        android:layout_width="match_parent"

        android:layout_height="@dimen/cascading_menu_max_height"

        android:background="@color/transparent"

        app:EMenuType="Three"

        app:itemSelectedDrawableId="@drawable/choose_item_selected"

        app:itemSelector="@drawable/choose_item_selector" />

</LinearLayout>

~~~

2. 初始化

~~~

cascadingMenuView =rootView.findViewById(R.id.cascadingMenuView);

//绑定Presenter

cascadingMenuView.startLoad(presenter);

//设置回调接口

cascadingMenuView.setCascadingMenuViewOnSelectListener(new MCascadingMenuViewOnSelectListener());

rootView.setOnClickListener(new View.OnClickListener() {//点击区域外退出

    @Override

    public void onClick(View v) {

Toast.makeText(getActivity(), "点菜单外隐藏", Toast.LENGTH_SHORT).show();

        if (listener !=null) {

listener.dismissMenu();

        }

}

});

~~~

3. 传入的presenter如下

~~~

private class MenuDataPresenterimplements CascadingMenuContract.Presenter {

private CascadingMenuContract.ViewmView;

    public void setView(CascadingMenuContract.View mView) {

this.mView = mView;

    }

@Override

    public void start() {

// TODO: 这里可做异步取数据

        ArrayList menuList =dBhelper.getProvince();

        // TODO: 取数据完更新UI

        mView.setFirstMenuList(menuList, 0);

    }

@Override

    public void requestSecondMenuList(MenuData parentMenuData) {

ArrayList secondMenuList =dBhelper.getCity(parentMenuData.getMenu_id());

        mView.setSecondMenuList(secondMenuList);

    }

@Override

    public void requestThirdMenuList(MenuData parentMenuData) {

ArrayList thirdMenuList =dBhelper.getDistrict(parentMenuData.getMenu_id());

        mView.setThirdMenuList(thirdMenuList);

    }

}

~~~

 好吧, 说多感觉就是词穷,  

 “Talk is cheap. Show me the code.”

GitHub - kluo88/MyDemo: 一些Demo集

相关文章

网友评论

      本文标题:06 | Android 项目笔记 实现下拉三级联动菜单选择

      本文链接:https://www.haomeiwen.com/subject/keifcqtx.html