Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android onBackPressed片段在关闭应用程序时转到另一个片段_Android_Android Fragments - Fatal编程技术网

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

Android onBackPressed片段在关闭应用程序时转到另一个片段,android,android-fragments,Android,Android Fragments,我正在打开一个片段,穿过另一个片段。从一个日历片段我打开一个搜索片段,我希望当这个人在搜索片段中并按下返回键时,它会将他们带到日历片段,而不是关闭应用程序 在MainActivity.java中,我实现了onBackPressed方法 @Override public void onBackPressed() { if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat

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

在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);
}

有没有办法只改变该片段上的行为,而保持其余片段上的正常行为

当您在日历片段中编写代码以打开搜索片段时,请在片段事务操作中添加以下行,如…

@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);
}

使用supportFragmentManager中的GetBackBackbackEntryCount并检查计数,根据条件只需更换fragmentHello!尝试在您的FragmentTransaction中添加.addToBackStack(null)此操作有效!您能解释一下这是如何工作的或者为什么工作的吗?因为当您使用add方法时,它会将该片段添加到堆栈中,所以当我们从第二个片段返回时。我们仍然有堆栈中的第一个片段