Android应用从Activity调用Fragment时每次第二次操作均崩溃求助
问题原因
- 核心逻辑错误:代码意图和实现逻辑不匹配。你需要实现的是从MainActivity3返回到之前承载
fragment_login的主页面,但现有代码是尝试在当前MainActivity3的内部新增fragment_login实例。R.id.container01这个容器id属于之前主页面的布局,MainActivity3对应的activity_main3.xml布局中不存在该id的控件,MainActivity3的FragmentManager只会在自身布局中查找容器,找不到就会抛出该异常。 - 首次点击看似正常的原因:首次提交Fragment事务时,可能因页面生命周期时序问题暂未触发布局校验,或你误以为点击按钮后的返回是代码生效(实际是误触了系统返回键),第二次触发事务时会严格校验容器存在性,直接触发崩溃。
解决方案
根据业务需求二选一即可:
方案1:仅需返回原有Fragment页面(推荐)
直接关闭当前MainActivity3,系统会自动回到跳转前的主页面(已加载fragment_login的页面),完全不需要操作Fragment。
将MainActivity3按钮点击事件的代码替换为:
finish();
方案2:需要在MainActivity3内部显示fragment_login
先给MainActivity3的布局补充容器,再避免重复添加Fragment:
- 修改
activity_main3.xml,在合适位置添加Fragment容器:
<FrameLayout android:id="@+id/container01" android:layout_width="match_parent" android:layout_height="match_parent" />
- 优化按钮点击逻辑,避免重复添加Fragment导致异常:
send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Fragment existFrag = getSupportFragmentManager().findFragmentById(R.id.container01); if (existFrag == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container01, new fragment_login()) .commit(); } } });
补充建议
安卓开发官方推荐类名使用大驼峰命名法,建议将fragment_login重命名为LoginFragment,避免后续出现类加载、反射相关的兼容问题。
内容的提问来源于stack exchange,提问作者tomtom
相关产品推荐
相关产品推荐

