我有一个活动,有两个片段。我正在替换OnCreate中的第一个片段,如下所示:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
profileFragment = Profile.newInstance()
AppUtils.replaceFragment(profileFragment, supportFragmentManager, R.id.baseFragment)
}
点击按钮后,我将其称为:
AppUtils.addFragmentToStack(EditAddress.newInstance(), supportFragmentManager, R.id.baseFragment)
以上两种静态方法都是:
fun replaceFragment(fragment: android.support.v4.app.Fragment, fragmentManager: android.support.v4.app.FragmentManager, id: Int) {
val transaction = fragmentManager.beginTransaction()
transaction.replace(id, fragment)
transaction.commit()
}
fun addFragmentToStack(fragment: android.support.v4.app.Fragment, fragmentManager: android.support.v4.app.FragmentManager, id: Int) {
val transaction = fragmentManager.beginTransaction()
transaction.setCustomAnimations(R.anim.activity_out, R.anim.activity_in, R.anim.activity_in_exit, R.anim.activity_out_exit)
transaction.replace(id, fragment)
transaction.addToBackStack(null)
transaction.commit()
}
我尚未使用setContentView()
,因为它已经在BaseActivity
中。
我没有BaseActivity
中的onbackPressed事件。
这是我的第一个片段:
class Profile : BaseFragment<ProfileViewModel, BaseListener>(R.layout.fragment_edit_own_address) {
override fun getViewModelClass(): ProfileViewModel =
ViewModelProviders.of(activity!!).get(ProfileViewModel::class.java)
override fun getViewListener(): BaseListener? = activity as? BaseListener?
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
//Some methods here
}
companion object {
fun newInstance() = EditAddressDialog().apply {
arguments.apply {
}
}
}
}
这是我的第二个片段:
class EditAddress : BaseFragment<ProfileViewModel, BaseListener>(R.layout.fragment_edit_own_address) {
override fun getViewModelClass(): ProfileViewModel =
ViewModelProviders.of(activity!!).get(ProfileViewModel::class.java)
override fun getViewListener(): BaseListener? = activity as? BaseListener?
companion object {
fun newInstance() = EditAddress().apply {
arguments.apply {
}
}
}
}
问题
当我开始活动profile
片段显示正确性时,在单击按钮时我能够将EditAddress
添加到Backstack,我已经在supportFragmentmanager.backStackEntry中对其进行了检查。
现在,当我按下“后退”按钮时,我无法弹出EditAddress
片段。无需动画即可完成我的活动。当我从profile
按后退按钮时,它以退出动画结束。
所以我认为FragmentManager中可能会发生一些崩溃,但是我找不到它。
注意
我尝试通过在活动中覆盖OnBackPressed()
方法来实现,但是当我调用supportFragmentManager.popBackStack()
时,它会完成Activity。
我没有在任何地方调用finish()
方法。