Android-以不同的意图值回到以前的活动

我有一个有这个转换的应用程序:

A -> B -> C -> D-> C 

进入C ,我必须检查一个标志。 那么我必须把它作为意向(让我们说intentX = false )传给DD做了一些事情之后,按下一个button之后它会回到C 我所做的只是再次传递intentX的值true,然后再startActivity C。 那么会发生什么呢,它创造了另一个活动C.

我想要发生的是,我将不必启动一个新的活动C,但通过调用super.onBackPressed()使用以前的C. 但是我无法通过intentX的新价值。 有没有其他的办法,来实现我想要的。 我可能会错过一些。

你想要的是startActivityForResult() 。 当你从CD ,而不是使用startActivity()而是使用startActivityForResult() 。 然后,当你想从D返回到C你可以使用setResult() ,它可以包含一个带extras setResult()Intent对象以返回给C

如果你不需要,我不build议在onBackPressed()做这个,因为这不会是用户期望的。 相反,你应该返回这个数据与一个事件,如Button点击。

所以,在C你会做类似的事情

  Intent i = new Intent(new Intent(C.this, D.class); startActivityForResult(i, 0); 

然后在你准备好的时候返回

  Intent i = new Intent(); i.putExtra(); // insert your extras here setResult(0, i); 

那么当您返回到C您将input此方法( 从文档中获取 )

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == PICK_CONTACT_REQUEST) { if (resultCode == RESULT_OK) { // A contact was picked. Here we will just display it // to the user. startActivity(new Intent(Intent.ACTION_VIEW, data)); /* can also get the extra sent back through data using data.getStringExtra("someKey"); assuming the extra was a String */ } 

在某些情况下,startActivityForResult并不是真正需要的,或者更改startActivityForResult的所有startActivity调用是不切实际的。

如果需要再次启动上一个活动的简单情况,我的build议是:使用FLAG_ACTIVITY_CLEAR_TOP标志。

引用简要说明 :

如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是closures其上的所有其他活动,并将此Intent交付给(现在开启顶端)旧活动作为一个新的意图。

例如,考虑一个由以下活动组成的任务:A,B,C,D。如果D调用startActivity(),并将Intentparsing为活动B的组件,则C和D将完成,B接收给定的Intent ,导致堆栈现在是:A,B。

所以这个例子

  // From ActivityD Intent intent = new Intent(getApplicationContext(), ActivityB.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // The flag we wanted intent.putExtra(ActivityB.SOME_EXTRA_THAT_I_NEED_CHANGED, SomeValue); // Example of changing the intent to get something new.. startActivity(intent); 

在那里你会得到新的意图是由哪个启动模式以及哪些标志用来启动它(在这种情况下是我们的ActivityB)定义的。

在上面的例子中,当前正在运行的活动B的实例将会在onNewIntent()方法中接收到你从这里开始的新的意图,或者自己完成并重新启动新的意图。 如果它已经声明它的启动模式是“多个”(默认),并且你没有在同一个意图中设置FLAG_ACTIVITY_SINGLE_TOP,那么它将被完成和重新创build; 对于所有其他启动模式,或者如果设置了FLAG_ACTIVITY_SINGLE_TOP,则这个Intent将被传递到当前实例的onNewIntent()。