代码之家  ›  专栏  ›  技术社区  ›  Nancy

onBackPressed片段在关闭应用程序时转到另一个片段

  •  0
  • Nancy  · 技术社区  · 5 年前

    我正在通过另一个片段打开一个片段。我从日历片段中打开一个搜索片段,我希望当这个人在搜索片段中并按下后,它会将他们带到日历片段,而不是关闭应用程序。

    在MainActivity.java中,我实现了onBackPressed方法

    @Override
    public void onBackPressed() {
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }
    

    这就是我在MainActivity.java中打开片段的方式

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.nav_calendar:
               getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new CalendarFragment()).commit();
                break;
            case R.id.nav_survey:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new SurveyFragment()).commit();
                break;
            case R.id.nav_forum:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ForumFragment()).commit();
                break;
            case R.id.nav_logout:
                logout();
                break;
            case R.id.nav_contact:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ContactFragment()).commit();
                break;
        }
    
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
    

    这就是我如何从日历片段中打开搜索片段

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.search:
                getFragmentManager().beginTransaction().replace(R.id.fragment_container, new SearchFragment()).commit();
                return false;
            default:
                break;
        }
        return super.onOptionsItemSelected(item);
    }
    

    有没有一种方法可以只改变该片段的行为,并保持其余片段的正常行为?

    0 回复  |  直到 5 年前
        1
  •  1
  •   Jaimil Patel    5 年前

    当您在Calender Fragment中编写代码以打开搜索片段时,请在FragmentTransaction操作中添加以下行,如。。。

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.search:
                getFragmentManager().beginTransaction().add(R.id.fragment_container, new SearchFragment()).addToBackStack(null).commit();
                return false;
            default:
                break;
        }
        return super.onOptionsItemSelected(item);
    }