2020-12-21

2020-12-21  本文已影响0人  feng_斩月

Android 底部菜单动态配置及刷新机制

主体架构FragmentTabHost+FrameLayout

注意:
id必须是android:id="@android:id/tabhost",里面的FrameLayout的id必须是android:id="@android:id/tabcontent"

        //注意这里一定要是fragmentArray 个数 防止服务器下发数据有问题导致数组越界
        int count = fragmentArray.size();
        TabSpec tabSpec = null;
        for (int i = 0; i < count; i++) {
            // 将每个fragment绑定到tabhost
            tabSpec = mainTabHost.newTabSpec(menuCodeArray.get(i)).setIndicator(getTabItemView(i));
            Class curFragmentCls = fragmentArray.get(i);
            if (curFragmentCls.isAssignableFrom(WebViewFragment.class)) { 
                //fragment 传递参数 需要再调用
                Bundle bundle = new Bundle();
                bundle.putString("menuCode", tabList.get(i).getMenuCode());
                mainTabHost.addTab(tabSpec, fragmentArray.get(i), bundle);
            }else {
                mainTabHost.addTab(tabSpec, fragmentArray.get(i), null);
            }
            mainTabHost.setTag(i);
        }

Tab菜单更新方式

 public MainBottomMenuBean(String menuCode, String lottieJson, String menuUrl) {
        this.menuCode = menuCode;
        this.lottieJson = lottieJson;
        this.menuUrl = menuUrl;
    }

更新Tab标签

 private void updateTab() {
        int tabCount = mainTabHost.getTabWidget().getChildCount();
        // 遍历设置选中状态
        for (int i = 0; i < tabCount; i++) {
            mainTabHost.getTabWidget().getChildAt(i).setOnTouchListener(tabTouchListener());
            setSelect(mainTabHost.getTabWidget().getChildAt(i), currentTabPosition == i);
        }
    }

传递参数
例:web页面,通过value获取对应数据

  Bundle bundle = new Bundle();
                bundle.putString("替换自己的KEY", tabList.get(i).getMenuCode());
                mainTabHost.addTab(tabSpec, fragmentArray.get(i), bundle);
   //获取数据 注意在onCreate之前
   String value = getArguments().getString("key");

tabHost点击

  private View.OnTouchListener tabTouchListener() {
        return new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
   if (event.getAction() == MotionEvent.ACTION_DOWN && v.equals(mainTabHost.getCurrentTabView())) {
     }else if (event.getAction() == MotionEvent.ACTION_DOWN) {
                }
 }

设置选中状态
使用Lottie加载动态图片,控制动画的播放和暂停

    private void setSelect(View view, boolean selected) {
        LottieAnimationView lavMenu = view.findViewById(R.id.lav_menu);
        lavMenu.setSelected(selected);
        if (lavMenu.isAnimating()) {
            lavMenu.cancelAnimation();
        }
        lavMenu.setProgress(0f);
        if (selected) {
            lavMenu.playAnimation();
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读