【问题标题】:onBackPressed with Fragments AndroidonBackPressed with Fragments Android
【发布时间】:2015-10-12 12:59:10
【问题描述】:

我正在尝试在具有 3 个片段的活动上实现 onBackPressed。我的问题是我在一段时间后实现了“再次按下退出”,但是当单击后退按钮两次时,它返回到上一个片段,而不是退出。当调用该片段时会发生这种情况(即,如果我打开游戏并立即退出,它就像一个魅力一样)。我在 MainActivity 上的 onBackPressed 方法如下所示;

@Override
public void onBackPressed() {

    if(getSupportFragmentManager().getBackStackEntryCount()!=0) {
        getSupportFragmentManager().popBackStack();
    }
    this.findViewById(R.id.linearLayout1).setVisibility(View.VISIBLE);
    if(mBackPressed + TIME_INTERVAL > System.currentTimeMillis() && getSupportFragmentManager().getBackStackEntryCount()==0){
        super.onBackPressed();
        System.exit(0);
        this.finish();
    }
    else { Toast.makeText(getBaseContext(), "Press back once more to exit", Toast.LENGTH_SHORT).show(); }

    mBackPressed = System.currentTimeMillis();
}

我基本上想检查用户是否在 mainActivity 布局中,这样我就可以使用 popBackStack 来逃避。任何解决方案都将不胜感激,如果这还不够,我可以提供更多信息。

谢谢, 贝克塔斯

【问题讨论】:

    标签: java android android-fragments onbackpressed


    【解决方案1】:

    如果您真的想退出,请完全忽略后台堆栈。使用此代码。

    @Override
    public void onBackPressed() {
        this.findViewById(R.id.linearLayout1).setVisibility(View.VISIBLE);
        if(mBackPressed + TIME_INTERVAL > System.currentTimeMillis()){
            this.finish();
            return;
        }
        else { 
           Toast.makeText(getBaseContext(), "Press back once more to exit", Toast.LENGTH_SHORT).show(); 
        }
        mBackPressed = System.currentTimeMillis();
    }
    

    【讨论】:

    • 这样我就不会对我的片段进行任何后压操作。我试过这个,这给我留下了不可背压的碎片,这可能会很痛苦。
    【解决方案2】:

    我认为您可能会发现此链接很有用 http://developer.android.com/training/implementing-navigation/temporal.html

    它说你可以使用这个 paturn 添加对堆栈的引用

    // Works with either the framework FragmentManager or the
    // support package FragmentManager (getSupportFragmentManager).
    getSupportFragmentManager().beginTransaction()
                               .add(detailFragment, "detail")
                           // Add this transaction to the back stack
                           .addToBackStack()
                           .commit();
    

    【讨论】:

    • 这类似于我如何从一个活动转到一个片段,这并没有真正解决如何处理对片段和活动的反压。
    【解决方案3】:
    @Override
    public void onBackPressed() {
        int count = getSupportFragmentManager().getBackStackEntryCount();
        if (count == 0) {
            getSupportFragmentManager().popBackStack(getSupportFragmentManager().getBackStackEntryCount(), getSupportFragmentManager().POP_BACK_STACK_INCLUSIVE);
            android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(context);
            builder.setCancelable(false);
            builder.setMessage("Are you sure you want to exit?")
                    .setNegativeButton(android.R.string.no, null)
                    .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
    
                        public void onClick(DialogInterface arg0, int arg1) {
                            (Main Activity Name).super.onBackPressed();
                        }
                    }).create().show();
        } else {
            super.onBackPressed();
    
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-09
      • 2019-02-01
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      相关资源
      最近更新 更多