Fragment addToBackStack关闭应用程序

问题描述 投票:1回答:4

我没有找到解决问题的办法。

我有几个片段(动态创建),但是我的后退按钮根本无法使用,按下它将会关闭应用程序,无论“活动”片段是什么。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {

case R.id.itemAdd:
FragmentTransaction tx = getFragmentManager().beginTransaction();
    Fragment fragment = new NeuesProduktFrag();

    tx.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right,
             R.anim.slide_in_left, R.anim.slide_out_right);
     tx.replace(R.id.main, fragment);
     tx.addToBackStack(null);
     tx.commit();
    return true;

一切正常,但是输入“ NeuesProduktFrag”片段并按“返回”按钮后,我的应用程序将关闭。在不同的按钮等中尝试过不需要覆盖onBackPressed对吗?addToBackStack应该可以解决吗?

android fragment back-stack
4个回答
6
投票

经过长时间的奋斗,这是我的最终代码:

@Override
public void onBackPressed() {

// initialize variables
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();

// check to see if stack is empty
if (fm.getBackStackEntryCount() > 0) {          
    fm.popBackStack();
    ft.commit();    
}
else {
    if (this.lastBackPressTime < System.currentTimeMillis() - 4000) {
Toast.makeText(this, "Nochmal drücken zum Beenden!", 4000).show();
this.lastBackPressTime = System.currentTimeMillis();
} else{
        super.onBackPressed();
    }        
}
}

我在FragmentActivity中使用了它,并添加了一个双选项卡以最终关闭该应用程序。


4
投票

我想在支持库的getFragmentManager()中使用getSupportFragmentManager()而不是支持库的FragmentActivity时会出现问题。例如,当您想同时使用PreferenceFragmentsetSupportActionBar()时。

通过一些更改,从ActionBarActivity复制粘贴onBackPressed()实现,已经解决了android.app.Activity中的问题:

@Override
public void onBackPressed() {
    if (getFragmentManager().popBackStackImmediate()) return;
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
        finish();
    else
        finishAfterTransition();
}

0
投票

我的代码工作从FragmentActivity变为Activity。

编辑:键入错误


0
投票

按返回按钮退出应用程序

@Override
public void onBackPressed() {

    // initialize variables
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();

    // check to see if stack is empty
    if (fm.getBackStackEntryCount() > 1) {
        fm.popBackStack();
        ft.commit();
    } else {

        if (backPressedTime + 2000 > System.currentTimeMillis()) {
            backToast.cancel();
            finishAffinity();
            System.exit(1);
            return;
        } else {
            backToast = Toast.makeText(getBaseContext(), "press back again to exit", Toast.LENGTH_LONG);
            backToast.show();
        }
        backPressedTime = System.currentTimeMillis();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.