繁体   English   中英

如何完成其​​他活动中的主要活动

[英]How to finish the main activity from other Activity

您好,您如何完成主要活动假设有3个活动和1个片段

LoginActivity,MainActivity,infoFrgMent,ChangePwdActivity。

场景是当我登录LoginActivity MainActivity将显示LoginActivityfinish()然后我将转到“ infoFrgMent”信息,然后在更改密码后想要更改密码。

LoginActivity将再次出现以重新登录,但是每当我尝试按回去时, MainActivity就会出现并且尚未finished

您需要删除以前的活动表单堆栈

setFlagsintentMainActivityLoginActivity

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

参考: https : //developer.android.com/guide/components/activities/tasks-and-back-stack.html

您需要添加Intent.FLAG_CLEAR_TOP。 该标志确保堆栈中目标活动之上的所有活动均已完成并显示。

您需要的另一件事是SINGLE_TOP标志。 如果堆栈中已经创建了一个新活动,则通过此活动您可以防止Android创建新活动。

请注意,如果已经创建了活动,则带有这些标志的意图将在目标活动中的名为onNewIntent(intent)的方法中传递(您需要对其进行重载以进行处理)。

然后在onNewIntent中,您有一个称为restart的方法或将调用finish()并对其自身启动新意图的方法,或者具有一个repopulate()方法来设置新数据。 我更喜欢第二种方法,因为它比较便宜,并且您始终可以将onCreate逻辑提取到一个单独的方法中,以进行填充。

要完成另一个活动,您必须创建一个静态方法来完成此操作,如下所示:

MainActivity.java

private static MainActivity activity;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    activity = this;

}

public static void finishThis()
{
    try
    {
        if (activity != null)
        {
            activity.finish();
        }
    }
    catch (Exception ex)
    {
        ex.printStackTrace();
    }
}

并这样称呼它:

AnotherActivity.java

MainActivity.finishThis();

而已

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM