我有一个应用程序具有这种转换:
A -> B -> C -> D-> C
输入C
后,我必须检查一个标志。然后我必须将其作为意图(让我们说intentX=false
)传递给D
。在D
中做了一些事情后,它会在按下按钮后返回C
。我所做的只是再次传递值为true的intentX
,然后再次启动活动C。所以发生的是它创建了另一个活动C。
我想做的是,我不必启动一个新的活动C,只需调用super即可使用以前的C。onBackPressed()。但我无法传递intentX的新值。有没有其他方法来实现我想要的。我可能错过了一些。
在某些情况下,实际上并不需要startActivityForResult,或者将所有startActivity调用更改为startActivityForResult是不切实际的。
如果需要“再次”开始上一个活动的简单情况,我的建议是:使用FLAG_ACTIVITY_CLEAR_TOP标志。
引用一个简短的描述:
如果设置了,并且正在启动的活动已经在当前任务中运行,那么不是启动该活动的新实例,而是关闭该活动之上的所有其他活动,并且此Intent将作为新Intent传递给(现在在顶部)旧活动。
例如,考虑一个由活动a、B、C、D组成的任务。如果D调用startActivity(),其意图解析为活动B的组件,则C和D将完成,B接收给定的意图,导致堆栈现在为: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\u ACTIVITY\u SINGLE\u TOP,则它将完成并重新创建;对于所有其他启动模式,或者如果设置了FLAG\u ACTIVITY\u SINGLE\u TOP,则此意图将传递到当前实例的onNewIntent()。
您需要的是startActivityForResult()。当你从C转到D时,不要使用startActivity()而是使用startActivity forresult()。然后,当您想从D返回C时,可以使用setResult(),它可以包含一个带有额外传递回C的意向对象。
如果不需要的话,我不建议在onBackPressed()中执行此操作,因为这不是用户所期望的。相反,您应该将此数据与事件一起返回,例如单击按钮。
所以,在C
中,您将执行如下操作
Intent i = new Intent(new Intent(C.this, D.class);
startActivityForResult(i, 0);
然后在D
中准备返回时
Intent i = new Intent();
i.putExtra(); // insert your extras here
setResult(0, i);
然后当您返回C
时,您将输入此方法(取自Docs)
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
*/
}
我有一个主要的活动,当我点击一个按钮,开始一个新的活动时,我使用了以下代码: 上面的代码是从主活动中运行的。 现在在主活动调用的新活动中,我有一个后退按钮。当我点击这个后退按钮时,我希望我的新活动结束,它必须回到原来的主活动。 我尝试过调用,只是(从新活动),但这会关闭我的整个应用程序(包括我的主要活动)。 如何关闭当前关注的活动,然后返回到主活动? 编辑 事实上,我的手机的后退按钮也关闭了我的整
我正在建立一个简单的应用程序,我想从片段回到物理按钮的活动。我该怎么做?我试图杀死碎片,但它不起作用。
可能重复如何关闭活动并返回到android中的上一个活动 问题是,我在当前使用的方法末尾添加finish(),整个应用程序就会关闭。 我希望通过按下手机上的后退按钮(我不想在应用程序中添加后退按钮)将其返回到上一个屏幕 我想从secondScreen()返回main
KitKat之前(或新库之前)的返回如下的URI content://media/external/images/media/3951. 使用并查询返回了文件URL。 然而,在KitKat中,库返回一个URI(通过“Last”),如下所示: content://com.android.providers.media.documents/document/image:3951 我该怎么处理?
我已经为我的浏览器游戏创建了一个AndroidWebView应用程序。我使用Javascript警报询问用户是否真的想要重置分数。但是我想使用Android警报而不是Javascript警报。所以我创建了一个Javascript接口。 现在我需要Javascript中Android警报的返回值。问题是Android警报有一个ClickListener。但是如何获取值并将其返回到Javascript
我试图解决一个问题,我必须在搜索中得到明确的结果。 当我对最喜欢的汽车“法拉利”执行术语查询时。我得到两个名为ABC的结果。在这种情况下,我只是希望返回的结果应该是一个。所以我的要求是,如果我可以应用一个不同的on name字段来接收一个1结果。 谢啦