1

我没有找到任何解决我的问题的方法。

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

@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 是否应该解决问题?

4

4 回答 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 中使用了它,并添加了一个双选项卡以最终关闭应用程序。

于 2013-11-07T14:19:51.797 回答
4

我猜在支持库中使用而getFragmentManager()不是支持库时会出现问题。例如,当你想和在一起。getSupportFragmentManager()FragmentActivityPreferenceFragmentsetSupportActionBar()

我通过一些更改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();
}
于 2014-10-27T05:06:22.493 回答
0

我的代码从 FragmentActivity 更改为 Activity。

编辑:输入错误

于 2014-05-20T15:35:48.420 回答
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();
    }
}
于 2019-09-26T20:36:04.427 回答