初始化各个 Fragment 并且切换

一、MainActivity.java

package com.example.zhenghuajing.shoppingmall.app;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.widget.FrameLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;

import com.example.zhenghuajing.shoppingmall.R;
import com.example.zhenghuajing.shoppingmall.base.BaseFragment;
import com.example.zhenghuajing.shoppingmall.community.fragment.CommunityFragment;
import com.example.zhenghuajing.shoppingmall.home.fragment.HomeFragment;
import com.example.zhenghuajing.shoppingmall.shoppingcart.fragment.ShoppingcartFragment;
import com.example.zhenghuajing.shoppingmall.type.fragment.TypeFragment;
import com.example.zhenghuajing.shoppingmall.user.fragment.UserFragment;

import java.util.ArrayList;

import butterknife.BindView;
import butterknife.ButterKnife;


public class MainActivity extends FragmentActivity {
    @BindView(R.id.frameLayout)
    FrameLayout frameLayout;
    @BindView(R.id.rb_home)
    RadioButton rbHome;
    @BindView(R.id.rb_type)
    RadioButton rbType;
    @BindView(R.id.rb_community)
    RadioButton rbCommunity;
    @BindView(R.id.rb_cart)
    RadioButton rbCart;
    @BindView(R.id.rb_user)
    RadioButton rbUser;
    @BindView(R.id.rg_main)
    RadioGroup rgMain;
    private ArrayList<BaseFragment> fragments;
    private int position;
    private BaseFragment currentFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Butternif 和 Activity 绑定
        ButterKnife.bind(this);
        // 初始化 Fragment
        initFragment();
        initListener();
        // 默认设置首页
        rgMain.check(R.id.rb_home);

    }

    /**
     * 初始化 Fragment
     */
    private void initFragment() {
        fragments = new ArrayList<>();
        fragments.add(new HomeFragment());
        fragments.add(new TypeFragment());
        fragments.add(new CommunityFragment());
        fragments.add(new ShoppingcartFragment());
        fragments.add(new UserFragment());
    }

    /**
     * 切换各个 Fragment
     */
    private void initListener() {
        rgMain.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                switch (i) {
                    case R.id.rb_home:
                        position = 0;
                        break;
                    case R.id.rb_type:
                        position = 1;
                        break;
                    case R.id.rb_community:
                        position = 2;
                        break;
                    case R.id.rb_cart:
                        position = 3;
                        break;
                    case R.id.rb_user:
                        position = 4;
                        break;
                    default:
                        position = 0;
                }
                seitchFragment(currentFragment, getFragment(position));
            }
        });

    }

    /**
     * 切换 Fragment
     * @param oldFragment 当前的 Fragment
     * @param newFragment 下一个 Fragment
     */
    private void seitchFragment(BaseFragment oldFragment, BaseFragment newFragment) {
        if (currentFragment != newFragment) {
            currentFragment = newFragment;
            if (newFragment != null) {
                FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
                // 隐藏当前 Fragment
                if (oldFragment != null) {
                    fragmentTransaction.hide(oldFragment);
                }

                // 判断新的 Fragment 是否添加
                if (!newFragment.isAdded()) {
                    fragmentTransaction.add(R.id.frameLayout, newFragment).commit();
                } else {
                    fragmentTransaction.show(newFragment).commit();
                }
            }
        }
    }

    /**
     * 根据 position 获取对应的 Fragmant
     * @param position 索引
     * @return BaseFragment
     */
    private BaseFragment getFragment(int position) {
        if (fragments.size() > 0 && fragments != null) {
            return fragments.get(position);
        }
        return null;
    }
}

猜你喜欢

转载自www.cnblogs.com/mxsf/p/10585386.html
今日推荐