public class MainActivity extends FragmentActivity {
private RadioGroup rgMain;
private FrameLayout frameLayout;
private Fragment tempFragment;//刚开始没有命名为tempFragment,而是命名为fragment
//多个fragment的集合
private ArrayList<BaseFragment> fragments;
//取fragment的位置
private int position;
//上次显示的Fragment
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d("TAG", "AonCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rgMain=findViewById(R.id.rg_main);
frameLayout=findViewById(R.id.framelayout);
//初始化框架
initFragment();
//给RadioGroup设置监听器
initListener();
}
private void initListener() {
rgMain.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch(checkedId){
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;
break;
}
//根据位置position取值
BaseFragment baseFragment=getFragment(position);
/**
* 第一个参数为当前的Fragment
* 第二个参数为将要去的
*/
switchFragment(tempFragment,baseFragment);
}
});
rgMain.check(R.id.rb_home);
}
//初始化框架
private void initFragment(){
Log.d("TAG", "initFragment: ");
fragments=new ArrayList<>();
fragments.add(new HomeFragment());
fragments.add(new TypeFragment());
fragments.add(new CommunityFragment());
fragments.add(new ShoppingCartFragment());
fragments.add(new UserFragment());
}
private BaseFragment getFragment(int position){
Log.d("TAG", "getFragment: ");
if(fragments!=null&&fragments.size()>0){
BaseFragment baseFragment=fragments.get(position);
return baseFragment;
}
return null;
}
private void switchFragment(Fragment fromFragment,BaseFragment nextFragment){
Log.d("TAG", "search");
if(tempFragment!=nextFragment){
tempFragment=nextFragment;
if(nextFragment!=null){
FragmentTransaction transaction=getSupportFragmentManager().beginTransaction();
//判断nextFragment是否添加
if(!nextFragment.isAdded()){
if(fromFragment!=null){
transaction.hide(fromFragment);
}
transaction.add(R.id.framelayout,nextFragment).commit();
}else{
if(fromFragment!=null){
transaction.hide(fromFragment);
}
transaction.show(nextFragment).commit();
}
}
}
}
}
刚开始声明Fragment没有命名为tempFragment,而是命名为fragment,就出现了Unable to start activity ComponentInfo,闪退了,改了用行了。
守大佬指教