Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.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碎片堆栈-备份(up)按钮不起作用_Android_Android Fragments_Fragment Backstack - Fatal编程技术网

Android碎片堆栈-备份(up)按钮不起作用

Android碎片堆栈-备份(up)按钮不起作用,android,android-fragments,fragment-backstack,Android,Android Fragments,Fragment Backstack,我对安卓系统一无所知。我很惊讶Android Studio没有用于片段之间导航的模板。我已经花了好几天时间,但仍然无法使我的代码正常工作。 我有一个活动和两个片段-main片段和AboutFragment。关于可通过抽屉菜单项访问。我想通过按下后退操作栏按钮返回MainFragment。问题是按钮不工作。有人能帮我吗 完成Android Studio项目: 这是我的活动课: public class MainActivity extends AppCompatActivity implemen

我对安卓系统一无所知。我很惊讶Android Studio没有用于片段之间导航的模板。我已经花了好几天时间,但仍然无法使我的代码正常工作。 我有一个活动和两个片段-main片段和AboutFragment。关于可通过抽屉菜单项访问。我想通过按下后退操作栏按钮返回MainFragment。问题是按钮不工作。有人能帮我吗

完成Android Studio项目:

这是我的活动课:

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener,
    MainFragment.OnFragmentInteractionListener, AboutFragment.OnFragmentInteractionListener {

private DrawerLayout drawer;
private boolean zOrderSet = false;
private ActionBarDrawerToggle toggleListener;

private FragmentManager.OnBackStackChangedListener mOnBackStackChangedListener =
        new FragmentManager.OnBackStackChangedListener() {
    @Override
    public void onBackStackChanged() {
        syncActionBarArrowState();
    }
};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    toggleListener = new ActionBarDrawerToggle(this, drawer, toolbar,
            R.string.navigation_drawer_open, R.string.navigation_drawer_close) {

        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
            super.onDrawerSlide(drawerView, slideOffset);
            if (!zOrderSet) {
                drawer.bringChildToFront(drawerView);
                drawer.requestLayout();
                drawer.invalidate();
                zOrderSet = true;
            }
        }

        public void onDrawerClosed(View view) {
            syncActionBarArrowState();
        }

        public void onDrawerOpened(View drawerView) {
            toggleListener.setDrawerIndicatorEnabled(true);
        }

    };
    drawer.setDrawerListener(toggleListener);
    toggleListener.syncState();
    getSupportFragmentManager().addOnBackStackChangedListener(mOnBackStackChangedListener);


    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);
    getSupportFragmentManager().beginTransaction().replace(R.id.flContent, MainFragment.newInstance("", "")).commit();
}

@Override
protected void onDestroy() {
    getSupportFragmentManager().removeOnBackStackChangedListener(mOnBackStackChangedListener);
    super.onDestroy();
}

private void syncActionBarArrowState() {
    boolean empty = getSupportFragmentManager().getBackStackEntryCount() == 0;
    toggleListener.setDrawerIndicatorEnabled(empty);
    getSupportActionBar().setDisplayHomeAsUpEnabled(!empty);
}

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

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (toggleListener.isDrawerIndicatorEnabled() && toggleListener.onOptionsItemSelected(item)) {
        return true;
    }

    int id = item.getItemId();
    if (id == android.R.id.home && getSupportFragmentManager().popBackStackImmediate()) {
        return true;
    }

    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

@Override
public boolean onNavigationItemSelected(MenuItem item) {
    FragmentTransaction ta = getSupportFragmentManager().beginTransaction();
    try {
        switch (item.getItemId()) {
            case R.id.nav_restart:
                ta.replace(R.id.flContent, MainFragment.class.newInstance());
                break;
            case R.id.nav_about:
                ta.replace(R.id.flContent, AboutFragment.class.newInstance()).addToBackStack(null);
                break;
            default:
                return false;
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        ta.commit();
    }

    drawer.closeDrawer(GravityCompat.START);
    return true;
}

@Override
public void onFragmentInteraction(Uri uri) {

}

}

您可以使用“替换”,但仍保留回栈历史记录。“你有没有读到其他建议?”道格,谢谢,威尔知道。但这并不能解决问题-OnOptions ItemSelected()未被调用,当我单击“操作栏后退”按钮时,您能解释一下这段代码的作用吗?只是放进一个代码转储并不能真正帮助未来的人们。
@Override
public void onBackPressed(){
 getActivity().getFragmentManager().beginTransaction().remove(this).commit();
}