完成另一项活动的活动

我想从另一个活动完成一个活动,如:

在Activity [A]中,点击button时,我正在调用Activity [B]而没有结束Activity [A]。

现在在Activity [B]中,有两个button, NewModify 。 当用户点击修改,然后从堆栈中popup一个活动[A],并勾选所有选项。

但是当用户点击Activity [B]中的Newbutton时,我必须从堆栈中完成Activity [A],并将Activity [A]重新加载到堆栈中。

我正在尝试,但是我无法从堆栈中完成Activity [A] …我该怎么做?

我使用的代码如下:

从活动[A]:

Intent GotoB = new Intent(A.this,B.class); startActivityForResult(GotoB,1); 

另一种方法在同一个活动

 public void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == 1) { if (resultCode == 1) { Intent i = getIntent(); overridePendingTransition(0, 0); i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); finish(); overridePendingTransition(0, 0); startActivity(i); } } } 

在活动[B]中,点击button:

 setResult(1); finish(); 

  • 请注意Honeycomb或更高版本Android版本的外部USB存储设备的更改
  • 当IntentService完成时,从Activity启动IntentService并刷新Activity
  • 我怎样才能发回数据使用完成?
  • Intent.setData与Intent.putExtra
  • Android - 设备解锁后会发生什么?
  • 为什么不是我的应用程序打开txt文件的应用程序列表?
  • 在我的应用中禁用多指触摸
  • 如何将EditText设置为只有hex数字的input?
    1. 在manifest文件中launchMode = "singleInstance"你的activity: launchMode = "singleInstance"

    2. 当用户点击新的,做FirstActivity.fa.finish(); 并调用新的意图。

    3. 当用户点击修改时,调用新的意图或简单地完成活动B.

    第一种方式

    在你的第一个活动中,像这样声明一个Activity object

     public static Activity fa; onCreate() { fa = this; } 

    现在在另一个Activity使用该对象来完成这样的第一个活动,

     onCreate() { FirstActivity.fa.finish(); } 

    第二种方法

    在您移动之后立即调用您想要完成的FirstActivity活动时,您可以在调用FirstActivity添加标志

     intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 

    但是使用这个标志,即使你不想要,这个活动也会完成。 有时如果你想显示FirstActivity你将不得不打电话使用意图。

    你可以做,但我认为你不应该打破正常的活动stream程。 如果你想完成你的活动,那么你可以简单地从你的活动B发送广播到活动A.

    在开始活动之前创build一个广播接收器B:

     BroadcastReceiver broadcast_reciever = new BroadcastReceiver() { @Override public void onReceive(Context arg0, Intent intent) { String action = intent.getAction(); if (action.equals("finish_activity")) { finish(); // DO WHATEVER YOU WANT. } } }; registerReceiver(broadcast_reciever, new IntentFilter("finish_activity")); 

    当您想从B完成活动A时,将活动B的广播发送到活动A.

     Intent intent = new Intent("finish_activity"); sendBroadcast(intent); 

    我希望它会为你工作…

    这是一个相当标准的沟通问题。 一种方法是在活动A中使用ResultReceiver:

     Intent GotoB=new Intent(A.this,B.class); GotoB.putExtra("finisher", new ResultReceiver(null) { @Override protected void onReceiveResult(int resultCode, Bundle resultData) { A.this.finish(); } }); startActivityForResult(GotoB,1); 

    然后在活动B中,您可以按需要完成它:

     ((ResultReceiver)getIntent().getExtra("finisher")).send(1, new Bundle()); 

    尝试类似的东西。

    有一种方法可以在你的情况下使用。

    步骤1:从活动A开始活动B.

     startActivity(new Intent(A.this, B.class)); 

    第二步:如果用户点击修改button,使用FLAG_ACTIVITY_CLEAR_TOP启动活动A,并通过额外的标志。

     Intent i = new Intent(B.this, A.class); i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); i.putExtra("flag", "modify"); startActivity(i); finish(); 

    第三步:如果用户点击修改button,使用FLAG_ACTIVITY_CLEAR_TOP启动活动A,并且通过额外的标志。

     Intent i = new Intent(B.this, A.class); i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); i.putExtra("flag", "add"); startActivity(i); finish(); 

    Step4:现在在ActivityA的onCreate()方法中,写下面的代码。

     String flag = getIntent().getStringExtra("flag"); if(flag.equals("add")) { //Write a code for add }else { //Write a code for modify } 

    看到我的答案堆栈溢出问题完成所有以前的活动

    你需要的是添加Intent.FLAG_CLEAR_TOP 。 此标志确保堆栈中目标活动之上的所有活动都已完成,并显示一个活动。

    另一件你需要的是SINGLE_TOP标志。 有了这个,你可以防止Android创build一个新的活动,如果有一个已经在堆栈中创build的。

    只是要小心,如果活动已经创build,这些标志的意图将在目标活动中的onNewIntent(intent)方法中onNewIntent(intent) (您需要重载它来处理它)。

    然后在onNewIntent有一个叫做restart的方法,或者调用finish()并启动一个新的intent,或者有一个repopulate()方法来设置新的数据。 我更喜欢第二种方法,它比较便宜,你总是可以将onCreate逻辑提取到一个单独的方法,你可以调用它来填充。

    我觉得我有最简单的方法

     Intent intent = new Intent(B.this, A.class); intent.putExtra("NewClicked", true); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); 

    并在A得到它

      if (getIntent().getBooleanExtra("NewClicked", false)) { finish();// finish yourself and make a create a new Instance of yours. Intent intent = new Intent(A.this,A.class); startActivity(intent); } 

    我刚应用了Nepster的解决scheme,就像一个魅力。 有一个小的修改从片段运行它。

    到你的片段

     // sending intent to onNewIntent() of MainActivity Intent intent = new Intent(getActivity(), MainActivity.class); intent.putExtra("transparent_nav_changed", true); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); 

    对于您想要重新启动的活动的OnNewIntent()。

     // recreate activity when transparent_nav was just changed if (getIntent().getBooleanExtra("transparent_nav_changed", false)) { finish(); // finish and create a new Instance Intent restarter = new Intent(MainActivity.this, MainActivity.class); startActivity(restarter); } 

    我知道这是一个古老的问题,其中一些方法不适用于我,所以对于任何未来或有麻烦的人

    我覆盖onPause并在该方法内调用finish()

    我希望你看看这里的分享。 它工作完全没有麻烦。

    活动a

     public static ActivityA instance = null; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); instance = this; } @Override public void finish() { super.finish(); instance = null; } 

    活动b

     public void onCreate(Bundle savedInstanceState) { if(ActivityA.instance != null) { try { ActivityA.instance.finish(); } catch (Exception e) {} } }