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); } }
关于Fragment的显示与隐藏结合RadioGroup的默认选中问题
最新推荐文章于 2021-05-26 09:39:55 发布