关于Fragment的显示与隐藏结合RadioGroup的默认选中问题

package myapp.first.myapplication.ui;

import android.support.v4.app.FragmentManager;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;

import myapp.first.myapplication.R;
import myapp.first.myapplication.tools.FragmentFactory;
import myapp.first.myapplication.tools.FragmentUtils;
import myapp.first.myapplication.tools.LogUtils;

public class MainActivity extends MyBaseActivity{

    private FrameLayout fl_container;
    private RadioButton rb1;
    private RadioButton rb2;
    private RadioButton rb3;
    private RadioButton rb4;
    private RadioGroup rg;
    private LinearLayout activity_main;
    private FragmentManager fragmentManager;
    private MyBaseFragment currentFragment;


    @Override
    public void init() {
        fragmentManager = getSupportFragmentManager();
    }

    @Override
    public int getLayoutResID() {
        return R.layout.activity_main;
    }

    public void initView() {
        fl_container = (FrameLayout) findViewById(R.id.fl_container);
        rb1 = (RadioButton) findViewById(R.id.rb1);
        rb2 = (RadioButton) findViewById(R.id.rb2);
        rb3 = (RadioButton) findViewById(R.id.rb3);
        rb4 = (RadioButton) findViewById(R.id.rb4);
        rg = (RadioGroup) findViewById(R.id.rg);
        activity_main = (LinearLayout) findViewById(R.id.activity_main);
    }

    @Override
    public void initData() {

    }

    @Override
    public void initListener() {
        rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                int i = -1;
                switch (checkedId){
                    case R.id.rb1:
                        FragmentFactory.create(0);
                        currentFragment = FragmentFactory.getCurrentFragment(0);
                        i = 0;
                        break;
                    case R.id.rb2:
                        FragmentFactory.create(1);
                        currentFragment = FragmentFactory.getCurrentFragment(1);
                        i = 1;
                        break;
                    case R.id.rb3:
                        FragmentFactory.create(2);
                        currentFragment = FragmentFactory.getCurrentFragment(2);
                        i = 2;
                        break;
                    case R.id.rb4:
                        FragmentFactory.create(3);
                        currentFragment = FragmentFactory.getCurrentFragment(3);
                        i = 3;
                        break;
                }
                LogUtils.e(mContext,"选中 :"+i);
                FragmentUtils.show(fragmentManager,R.id.fl_container,currentFragment);
            }
        });
        ((RadioButton)rg.findViewById(R.id.rb1)).setChecked(true);
//        rg.check(R.id.rb1);  会调用多次选中0  应该是两次都走到了判断的里面  造成重复add的错误
    }

}
package myapp.first.myapplication.tools;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;

/**
 * Created by Administrator on 2016/10/7 0007.
 */

public class FragmentUtils {

    public static Fragment preFragment;

    public static Fragment getPreFragment() {
        return preFragment;
    }

    public static void setCurrentFragment(Fragment currentFragment){
        preFragment = currentFragment;
    }

    public static void show(FragmentManager fragmentManager, int containerID, Fragment showFragment){
        if (preFragment == null)
            show(fragmentManager,containerID,showFragment,null);
        else
            show(fragmentManager,containerID,showFragment,preFragment);
    }

    public static void show(FragmentManager fragmentManager, int containerID, Fragment showFragment,Fragment hideFragment){
        FragmentTransaction transition = fragmentManager.beginTransaction();
        if (!showFragment.isAdded()){
            transition.add(containerID,showFragment);
//            transition.add(containerID,showFragment).addToBackStack(null);
        }
        if (hideFragment == null)
            transition.show(showFragment);
        else
            transition.hide(preFragment).show(showFragment);  // 这里先隐藏后显示  是为了解决 后退时选中的是第一个 再进程序时 第一个被隐藏的Bug
        transition.commit();
        preFragment = showFragment;
    }
}

package myapp.first.myapplication.tools;

import android.support.v4.app.Fragment;

import java.util.HashMap;
import java.util.Map;

import myapp.first.myapplication.ui.FragmentRbtn1;
import myapp.first.myapplication.ui.FragmentRbtn2;
import myapp.first.myapplication.ui.FragmentRbtn3;
import myapp.first.myapplication.ui.FragmentRbtn4;
import myapp.first.myapplication.ui.MyBaseFragment;

/**
 * Created by wangx on 2016/7/5.
 * 生产Fragment的工厂类
 */
public class FragmentFactory {
    private static Map<Integer, MyBaseFragment> fragmentMap = new HashMap<>();

    /***
     * 生产Fragment
     *
     * @param position
     * @return
     */
    public static MyBaseFragment create(int position) {
        // 先在缓存中取
        MyBaseFragment fragment = fragmentMap.get(position);
        //取不到 就重新创建
        if (fragment == null) {
            if (position == 0) {
                fragment = new FragmentRbtn1();
            } else if (position == 1) {
                fragment = new FragmentRbtn2();
            } else if (position == 2) {
                fragment = new FragmentRbtn3();
            } else if (position == 3) {
                fragment = new FragmentRbtn4();
            }
            // 缓存Fragment对象
            if (fragment != null) {
                fragmentMap.put(position, fragment);
            }
        }
        return fragment;
    }

    public static MyBaseFragment getCurrentFragment(int index){
        return fragmentMap.get(index);
    }
}



  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值