美文网首页Android开发知识小集
Android Activity嵌套Fragment

Android Activity嵌套Fragment

作者: Mikk丶 | 来源:发表于2018-07-16 15:31 被阅读117次

    问题:Activity嵌套4个Fragment。假如切换到后台。Activity被杀死。重新进入是否可以记录退出到后台时的页面。
    使用:onSaveInstanceState()方法。

    @BindView(R.id.fl_content)
    FrameLayout flContent;
    @BindView(R.id.btn_navigation)
    BottomNavigationViewEx btnNavigation;
    private BaseFragment[] mFragments = new BaseFragment[4];
    private int currentTab = 0;
    @Override
    protected void onActivityCreate(Bundle savedInstanceState) {
        if (savedInstanceState == null) {
            mFragments[0] = TabHomeFragment.newInstance();
            mFragments[1] = TabMarketFragment.newInstance();
            mFragments[2] = TabTradeFragment.newInstance();
            mFragments[3] = MyPageFragment.newInstance();
            getSupportDelegate().loadMultipleRootFragment(R.id.fl_content, 0, mFragments);
        } else {
            currentTab = savedInstanceState.getInt(Constants.CURRENT_TAB);
            mFragments[0] = findFragment(TabHomeFragment.class);
            mFragments[1] = findFragment(TabMarketFragment.class);
            mFragments[2] = findFragment(TabTradeFragment.class);
            mFragments[3] = findFragment(TabHomeFragment.class);
            showHideFragment(mFragments[currentTab]);
        }
        btnNavigation.enableAnimation(false);
        btnNavigation.enableShiftingMode(false);
        btnNavigation.enableItemShiftingMode(false);
        btnNavigation.setTypeface(Typeface.DEFAULT_BOLD);
        btnNavigation.setOnNavigationItemSelectedListener(item -> {
            switch (item.getItemId()) {
                case R.id.menu_item_home:
                    currentTab = 0;
                    showHideFragment(mFragments[0]);
                    return true;
                case R.id.menu_item_market:
                    currentTab = 1;
                    showHideFragment(mFragments[1]);
                    return true;
                case R.id.menu_item_trade:
                    currentTab = 2;
                    showHideFragment(mFragments[2]);
                    return true;
                case R.id.menu_item_mine:
                    currentTab = 3;
                    showHideFragment(mFragments[3]);
                    return true;
                default:
    
            }
            return true;
        });
    }
    
    @Override
    public void setStatusBar() {
        StatusBarUtil.setTransparentWithNoNavigation(this, true);
    }
    
    @Override
    public int getLayoutId() {
        return R.layout.activity_main;
    }
    
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt(Constants.CURRENT_TAB, currentTab);
    }
    

    用到第三方

    compile 'com.github.ittianyu:BottomNavigationViewEx:1.2.4'
    

    xml

    <?xml version="1.0" encoding="utf-8"?>
    <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:fitsSystemWindows="true"
    android:orientation="vertical">
    
      <FrameLayout
        android:id="@+id/fl_content"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
    
      <com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx
        android:id="@+id/btn_navigation"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp50"
        android:background="@color/white"
        app:itemIconTint="@color/selector_bottom_item_color"
        app:itemTextColor="@color/selector_bottom_item_color"
        app:menu="@menu/bottom_navigation_menu" />
    </LinearLayout>
    

    /**
     * 初始化默认fragment
     *
     * @param savedInstanceState
     */
    private void initDefaultFragment(Bundle savedInstanceState) {
        if (savedInstanceState != null) {
            LogUtil.e("-------------------------initAgain-------------------------------------->");
            //非空校验主要为了防止,置于后台activity被销毁,而fragment没有被销毁,再次add时页面重叠现象
            currentTab = savedInstanceState.getString(Constants.CURRENT_TAB);
            if (!TextUtils.isEmpty(currentTab)) {
                switchFragment(currentTab);
                LogUtil.e("--------------------------------------------------------------->" + currentTab);
            }
        } else {
            LogUtil.e("-------------------------init------------------------------------->");
            TabBuyQCFragment defaultFragment = TabBuyQCFragment.newInstance();
            getSupportFragmentManager()
                    .beginTransaction()
                    .add(R.id.fl_content, defaultFragment, currentTab)
                    .commit();
            currentFragment = defaultFragment;
        }
    }

    相关文章

      网友评论

        本文标题:Android Activity嵌套Fragment

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