首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:调用finish后将重新创建activity

Android:调用finish后将重新创建activity
EN

Stack Overflow用户
提问于 2019-02-04 17:15:05
回答 3查看 554关注 0票数 1

我正在尝试创建一个包含两个活动的应用程序:MainActivitySubActivity

将通过调用startActivityForResult()MainActivity创建SubActivity

当我点击在SubActivity中结算的按钮时,它应该会自动完成并转到MainActivity。但我在完成SubActivity时遇到了问题。在调用SubActivity.onPause()之后,将立即调用SubActivity.onCreate(),并重新创建SubActivity。

我只想关闭SubActivity并显示MainActivity,但为什么会发生这种情况?

我搜索了同样的问题,发现轮换会使系统调用onCreate()。但在我的例子中,屏幕方向固定为纵向。

有没有人能给我一个解决这个问题的主意?

编辑:我解决了这个问题。MainActivity中存在错误的逻辑。

当变量包含特定值时,将从MainActivity创建SubActivity。反映变量值的display update方法在代码中被调用了两次。这使得我的应用程序在finish()之后重新创建了SubActvity

MainActivity请求创建Subactivity两次,但由于我的应用程序被设置为android:launchMode="singleTop",因此只有在第一个SubActivity完成后才能创建第二个app。非常感谢你给我的建议!

EN

回答 3

Stack Overflow用户

发布于 2019-02-04 18:33:08

您可以使用或首先检查的行为,

1)finishAffinity();

2)finishActivityFromChild();

希望它能起作用。

否则,为了更好地沟通,在这里放几行代码,这样我们就会正确地理解并给你一些指导。

票数 0
EN

Stack Overflow用户

发布于 2019-02-04 19:14:52

在我的例子中,我调用了下面的函数。

代码语言:javascript
复制
btn.setOnClickListener {
    setResult(result)
    finishActivity(REQUEST_CODE)
    finish()
}
票数 0
EN

Stack Overflow用户

发布于 2019-02-05 14:55:23

正如你所描述的,我给你举了个例子。在MainActivity中,使用startActivityForResult()方法调用SubActivity

例如:

代码语言:javascript
复制
Intent intent = new Intent(this, SubActivity.class);
startActivityForResult(intent, 1);

现在,在您的SubActivity中设置要发送回MainActivity的数据。(下面是两个示例)

以数据为例:

代码语言:javascript
复制
Intent intent = new Intent();
intent.putExtra("key",result);
setResult(Activity.RESULT_OK, returnIntent);
finish();

无数据示例:(如果您没有将数据发送到MainActivity)

代码语言:javascript
复制
Intent intent = new Intent();
setResult(Activity.RESULT_CANCELED, intent);
finish();

MainActivity中,覆盖onActivityResult()方法以检索结果。(仅当您从SubActivity发送数据时)

代码语言:javascript
复制
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1) {
        if(resultCode == Activity.RESULT_OK){
            String data=data.getStringExtra("key");
        }
        if (resultCode == Activity.RESULT_CANCELED) {
            //Write your code if there's no result
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54513014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档