1

我正在为 Android 制作一个应用程序,我需要一些帮助。我有三个活动ABC。当我在A并开始B时,我不想完成()A因为我希望选择返回。但是如果我从B开始C我想完成AB。我见过一些使用 startActivityForResult 的例子,但我从来没有掌握它的窍门。任何人都有一些简单的示例可以解释,所以我可以在我的代码中使用它?

提前致谢!

4

3 回答 3

0

对于第一部分,当您将表单 B 移动到 C 时,您想从 A 完成此 StartActivityforResult 的 A 和 B,当您想从 B 移动到 C 完成 B 时,它将自动触发 A 的 onActivityResult,您可以在那里启动活动 C

这是 StartActivityforResult 的示例

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

于 2012-05-16T16:11:13.133 回答
0
Intent intent = new Intent( this, C.class );
intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP );
startActivity( intent );

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

于 2012-05-16T16:10:02.340 回答
0

我有三个意图 A、B 和 C。

为了清楚起见,我认为您的意思是Activitys (您不能“进入” an Intent)。

当我在 A 并开始 B 时,我不想完成() A,因为我希望选择返回。但是如果我从 B 开始 CI 想要完成 A 和 B。

你想做的是startActivityForResult(new Intent(this, C.class), requestCode)Activity B. 然后在 中Activity B,您覆盖B (因此,从 backstack 中弹出),或者您什么也不做(因此,留在 中onActivityResult())。finish()BB

这是您需要做的:

  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();
      
于 2012-05-16T16:18:18.853 回答