如何管理片段堆栈之类的活动,

时间:2018-11-22 09:06:13

标签: android android-activity

我有很多活动。

  

A是列表活动。

     

B是表格活动。并动态生成。我连续两次打开此活动。

     

C是结果活动。

A-> B-> B就像简单地推送新活动。 如果结果成功,则我想在按C时清除所有表格。

A-> B-> B-> C ==> A-> C。

如果Im在C活动中结果失败,则可以返回如上的不同活动。

A-> B或A-> B-> B

当我按下C键时,我会使用cleartop,但它会清除所有活动,如何保存A活动的状态。

我如何管理片段等活动。

*当我从第二个B回来时,第一个B应该打开*

4 个答案:

答案 0 :(得分:4)

您可以通过以下步骤实现它:

  1. android:launchMode="singleTask"文件中设置ActivityA中的AndroidManifest.xml
  2. onNewIntent中设置ActivityA方法,如下所示:

    @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); Bundle mBundle = intent.getExtras(); if(mBundle!=null){ String launchActivity = mBundle.getString("activityName"); switch (launchActivity){ case "ActivityD": // This is Activity Name Here it is ActivityD.class startActivity(new Intent(ActivityA.this, ActivityD.class)); break; }
    }
    }

  3. 现在从ActivityA开始ActivityC,如下所示。

    startActivity(new Intent(ActivityC.this, ActivityA.class).putExtra("activityName", ActivityD.class.getSimpleName()));

它将调用onNewIntent的{​​{1}}方法,并将匹配参数并从ActivityA启动ActivityD。因此,您的ActivityA将保留在堆栈中,而ActivityA将被添加在堆栈顶部。

  1. 现在要从 A-> D 获得 A-> B ,您可以在启动ActivityD时在ActivityD中调用finish()方法来自ActivityB

关于ActivityLaunchMode,请参阅this link

希望它会为您服务!

答案 1 :(得分:2)

在活动A上,您无法使用此功能进入活动B

    startActivity(new Intent(Activity_A.this, Activity_B.classs));

从B到C

    startActivity(new Intent(Activity_B.this, Activity_C.classs));
    finish();

从C到D

    startActivity(new Intent(Activity_C.this, Activity_D.classs));
    finish();

从D到A

    finish();

它将关闭Activity_D Resume() Activity_A

答案 2 :(得分:2)

当您从Activity B到Activity C或从C到D启动Activity时,您需要调用finish();期望参加活动A。 喜欢 A-> D。

Start Activity(new Intent(A.this,D.class));

现在,当您单击活动A-> B然后是B-> C然后是C->时,您应该喜欢

A-> B。

Start Activity(new Intent(A.this,B.class));

B-> C

Intent intent =new Intent(B.this,C.class);
startActivity(intent);
finish();

C-> D

Intent intent =new Intent(C.this,D.class);
startActivity(intent);
finish();

现在,当您按返回时,您将返回到活动A。您应该删除所有clearActivityTop();。来自代码。

答案 3 :(得分:1)

您可以通过更频繁地使用片段来实现

  

活动::将活动放置到活动的后台时,用户可以通过导航到上一个活动   按返回按钮。

     

活动可以独立存在。

     

片段::将片段放置到活动中时,我们必须通过在执行过程中调用addToBackstack()来请求保存实例   碎片交易。

     

片段必须存在于活动中   source

通过使用片段,您可以使用标签轻松删除所需的任何页面,但是,如果您仍想使用活动

  

如果您使用startActivityForResult()而不是startActivity(),则   根据活动的返回值,您可以   立即完成()先前活动以模拟   您想要的行为。通过在所有活动中使用此方法,您可以   可以将此行为级联活动堆栈,以使您能够   从活动D转到活动A。