Android中启动第二个Activity时Fragment自动加载的问题求助
问题分析与解决方案
问题原因
- Fragment自动加载的核心原因:你在
FragmentContainerView中设置了android:name="com.example.myapplication.FirstFragment"属性,这个属性会让Android系统在第二个Activity创建时,自动实例化并加载指定的Fragment,导致一启动Activity就加载了Fragment,不符合点击按钮才加载的需求。 - 代码逻辑错误:你写的
onClick方法里调用了setContentView(R.layout.activity_choose_lab),这是错误的——Activity的布局应该在onCreate方法中设置,重复调用会导致布局重置,可能引发其他异常。
解决方案
1. 修改Fragment容器的XML代码
移除FragmentContainerView的android:name属性,让系统不再自动加载Fragment:
<androidx.fragment.app.FragmentContainerView android:id="@+id/FirstFragmentContainer" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />
2. 修正第二个Activity的代码
在Activity的onCreate方法中完成布局设置和按钮点击事件绑定,删除原来的onClick方法:
class ChooseLab : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_choose_lab) val callFragmentFirst = findViewById<Button>(R.id.call_fragment_first) callFragmentFirst.setOnClickListener { val fragmentTransaction = supportFragmentManager.beginTransaction() fragmentTransaction.replace(R.id.FirstFragmentContainer, FirstFragment()) fragmentTransaction.commit() } } }
注意事项
- 确保布局文件
activity_choose_lab中存在call_fragment_first按钮,且不要在XML中设置android:onClick="onClick"(避免和旧方法冲突)。 - 原来的
onClick方法可以直接删除,避免不必要的布局重置操作。
内容的提问来源于stack exchange,提问作者Dmitriy
相关产品推荐
相关产品推荐

