实践尚硅谷商城项目时闪退问题(问题记录)

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闪退了,改了用行了。

守大佬指教

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值