我在一个活动中有三个Fragment,用于
的FragmentTransaction片段A到片段B, 片段B到片段C
工作正常,但是在onBackPressed()上它会像
一样流动片段C到片段B,片段B到片段A,
但是当onBackPressed()对于片段A时,它将关闭该片段,我不想关闭片段A,这是我的代码。
在OnNavigationItemSelectedListener上。
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment fragment;
switch (item.getItemId()) {
case R.id.navigation_home:
fragment = new HomeFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.frame_container, fragment);
transaction.commit();
return true;
case R.id.navigation_my_orders:
fragment = new MyOrdersFragment();
loadFragment(fragment);
return true;
case R.id.navigation_profile:
fragment = new ProfileFragment();
loadFragment(fragment);
return true;
}
return false;
}
};
用于加载片段。
private void loadFragment(Fragment fragment) {
// load fragment
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.right_enter, R.anim.right_enter);
transaction.replace(R.id.frame_container, fragment);
transaction.addToBackStack(null);
transaction.commit();
}
如何解决,请告诉我。
答案 0 :(得分:1)
onBackPressed方法由包含您的片段的Activity处理。
在“活动”中,您需要覆盖onBackPressed方法
@Override
public void onBackPressed() {
super.onBackPressed();
}
super.onBackPressed将删除您的片段,您可以添加一个条件,如果您在FragmentA中,则不要触发该条件
@Override
public void onBackPressed() {
if (!isFragmentA){
super.onBackPressed();
}
}
您可以通过多种方法来查找当前在屏幕上显示的片段。
答案 1 :(得分:0)
请在您的活动中添加代码。
override fun onBackPressed() {
if (supportFragmentManager.backStackEntryCount > 0)
supportFragmentManager.popBackStack()
else {
}
}
用于加载片段
private void loadFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.right_enter, R.anim.right_enter);
transaction.add(R.id.frame_container, fragment);
transaction.addToBackStack(fragment.getClass().toString());
transaction.commit();
}
或者您可以使用以下代码获取当前片段,并检查其是否为FragemntA。
override fun onBackPressed() {
val fragment = supportFragmentManager.findFragmentById(getContainer())
if(fragment !is FragmentA){
supportFragmentManager.popBackStack()
}
}