java - 按返回键返回第一个 fragment

标签 java android

例如,当我在 Fragment 5 中时,按下后退按钮,应用程序就会出现。我想要的是,当我按“后退”按钮时,我打开第 1 号 fragment 。我该怎么做?

我尝试了很多代码,但都不起作用,例如

FragmentManager fm = getActivity().getSupportFragmentManager();
 for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
    fm.popBackStack();
}

getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

这是我在 MainActivity 中的 fragment 代码

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // make new object and find the view "BottomNavigationView"
    BottomNavigationView navigationView = findViewById(R.id.bottom_navigation);
    // To make the first fragment shows when the app start.
    // We will ignore the "activity_main" and we will make new activity(fragment) called "fragment_home"
    // and we will add all views we want to display them on it.
    // (fragment_layout) it is a fragment have id was defined in "activity_main"
    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_layout,
            new HomeFragment()).commit();
    // make Listener to call the fragments on buttons
    // to start new fragment
    navigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            Fragment selectedFragment = null;
            switch (item.getItemId()) {
                // first fragment "home"
                case R.id.home_item:
                    selectedFragment = new HomeFragment();
                    break;
                // second fragment "videos"
                case R.id.videos_item:
                    selectedFragment = new VideosFragment();
                    break;
                // third fragment "ebadat"
                case R.id.ebadat_item:
                    selectedFragment = new EbadatFragment();
                    break;
                // fourth fragment "images"
                case R.id.images_item:
                    selectedFragment = new ImagesFragment();
                    break;
                // fifth fragment "more"
                case R.id.settings_item:
                    selectedFragment = new MoreFragment();
                    break;
            }
            assert selectedFragment != null;
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_layout, selectedFragment).commit();
            return true;
        }

    });
}

最佳答案

首先,您必须在 fragment 中实现 onBackPressed 方法。

  1. 创建一个名为 IOnBackPressed 的接口(interface): 单击 package -> new Java Class -> 并在 Kind 中选择接口(interface) -> OK 您的界面应如下所示:

     public interface IOnBackPressed {
     boolean onBackPressed();
     }
    
  2. 之后打开 MainActivity 并添加以下内容:

     @Override
     public void onBackPressed() {
         //super.onBackPressed(); delete this line
         // and start your fragment:
    
         Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
         if (!(fragment instanceof IOnBackPressed) || !((IOnBackPressed) fragment).onBackPressed()) {
             super.onBackPressed();
         }
     }
    
  3. 您将其实现到您的 fragment 中:

     public class Profil_Fragment extends Fragment implements IOnBackPressed 
    

    并将其添加到 fragment 中:

      @Override
     public boolean onBackPressed() {
         //do what you want
         NextFragment nextFrag= new NextFragment();
     getActivity().getSupportFragmentManager().beginTransaction()
          .replace(R.id.fragment_container, nextFrag, "findThisFragment")
          .addToBackStack(null)
          .commit();
    
          return true;
     }
    

关于java - 按返回键返回第一个 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62472105/

相关文章:

android - 客户端如何等待可能的服务器消息?

jquery - jQTouch 不再支持 Android?

java - 使用 EnumSet(不同类型)作为参数的相同方法名称

java - 无法使用gradle为移动设备构建胶子项目

java - 如何在java gui中创建动画矩形?

android - 线性布局 child 不滚动

java - git:将现有存储库拆分为子模块

java.lang.NoClassDefFoundError : com/google/common when trying to create a Configuration object

android - 使用 SharedPreferences 保存用户详细信息

java - Android:如何显示相同标签名称的所有 XML 值