Android意图,在下一个打开时关闭

时间:2012-05-16 15:53:17

标签: android android-intent android-activity

我正在为Android制作应用,我需要一些帮助。我有三项活动 A B & C 即可。当我在 A 并开始 B 时,我不想完成() A ,因为我希望该选项可以返回。但如果我从 B 开始 C ,我想完成 A B 。我已经看到了一些使用startActivityForResult的例子,但我从未得到过它。任何人都有一些简单的样本来解释,所以我可以在我的代码中使用它?

提前致谢!

3 个答案:

答案 0 :(得分:0)

Intent intent = new Intent( this, C.class );
intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP );
startActivity( intent );

使用该标志清除活动堆栈,因此当您按下C上的后退按钮时,您将移至主屏幕

答案 1 :(得分:0)

第一部分 当你将表格B移动到C时,你想要完成A和B. 为了这 来自A的StartActivityforResult以及当你想从B移动到C完成B时 它会自动触发A的onActivityResult,在那里你可以启动活动C

这是StartActivityforResult

的示例

http://saiful103a.wordpress.com/2011/03/19/android-startactivity-and-startactivityforresult/

答案 2 :(得分:0)

  

我有三个意图A,B&下进行。

为了清楚起见,我认为你的意思是Activity s(你不能“进入”Intent)。

  

当我在A并且开始B时,我不想完成()A因为我想要选择回去。但如果我从B开始C,我想完成A和B。

您要做的是从startActivityForResult(new Intent(this, C.class), requestCode)致电Activity B。然后在Activity B中,您覆盖onActivityResult()finish() B(因此,从背信息中弹出B)或您什么都不做(因此,保留在B )。

以下是您需要做的事情:

  1. 在班级中定义public static final请求代码(这被认为是一种良好做法)。您将使用此代码来区分对startActivityForResult()的不同调用。

    public static final int C_START_CODE = 0;
    
  2. 来自Activity B,请致电

    startActivityForRequest(C.class,C_START_CODE);

    然后,通过覆盖B按如下方式抓取onActivityResult()中的结果,

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        switch(requestCode) {
            case C_START_CODE:
                if (resultCode == RESULT_OK) {
                    // Add code here as necessary before finishing B
                    //   and backing out of the Activity to A.
                    finish();
                }
            default: 
                break;
        }
    }
    
  3. 最后,当您决定完成Activity C时,请务必区分这两种情况:

    • 如果您想完成Activity B AND Activity C,请致电

      setResult(RESULT_OK);
      finish();
      
    • 如果您只想完成Activity C,请致电

      setResult(RESULT_CANCELED);
      finish();