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

Fragment addToBackStack关闭应用程序

  •  1
  • Markus  · 技术社区  · 11 年前

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

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

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

    一切正常,但在输入“NeuesProduktFragment”并按下返回按钮后,我的应用程序关闭。在不同的按钮中尝试过。 不需要重写onBackPressed,对吗? addToBackStack是否应该做到这一点?

    4 回复  |  直到 11 年前
        1
  •  6
  •   Markus    11 年前

    在我努力了很长时间之后,这是我的最后一个代码:

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

        2
  •  4
  •   Игорь Щербаков    10 年前

    我想问题是在使用时出现的 getFragmentManager() 而不是支持库的 getSupportFragmentManager() 在支持库中 FragmentActivity 。例如,当您想要 PreferenceFragment setSupportActionBar() 在一起

    我已经解决了我的问题 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();
    }
    
        3
  •  0
  •   Kani    10 年前

    我的代码从FragmentActivity变为Activity。

    编辑:键入错误

        4
  •  0
  •   Martin Zeitler    5 年前

    按后退按钮退出应用程序

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