问题描述
我正在尝试找到一种在android中的任务之间切换的方法。
假设我有活动A,B,C,D。
活动A和活动B处于一项任务(相似性)
C和D在另一个任务中。
这是创建新任务的C活动的清单代码。
Option Explicit
Sub updateCurrentRevenueData()
' Define Source Workbook Names.
Dim sNames As Variant
sNames = Array("Jap.xlsm","Trap.xlsm","Bart.xlsm")
' Define Destination First Available Cell Range.
With Workbooks("Consol.xlsm").Worksheets("Data")
Dim dFirst As Range
Set dFirst = .Cells(.Rows.Count,"A").End(xlUp).Offset(1)
End With
' Define Destination Current First Cell Range.
Dim dCell As Range
Set dCell = dFirst
' Declare additional variables for upcoming 'For Each Next' loop.
Dim sName As Variant ' Current Source Workbook Name
Dim sLastRow As Long ' Current Source Last Row
Dim sRng As Range ' Current Source copy Range
Dim dRows As Long ' Destination Total Number of Rows of copied Data
' Iterate Source Workbooks.
For Each sName In sNames
' Define Current copy Range.
With Workbooks(sName).Worksheets("Names")
sLastRow = .Cells(.Rows.Count,"A").End(xlUp).Row
Set sRng = .Range("A2:N" & sLastRow)
End With
With sRng
' copy Current copy Range to Destination Worksheet.
.copy dCell
' If you only need values,you should rather use the following line
' instead of '.copy dCell'. Then you also don't need
' '.Interior.Color = xlNone'.
'dCell.Resize(.Rows.Count,.Columns.Count).Value = sRng.Value
' Count Destination Total Number of Rows of copied Data.
dRows = dRows + .Rows.Count
' Define Destination Current First Cell Range.
Set dCell = dCell.Offset(.Rows.Count)
End With
Next sName
' Apply formatting to Total Destination Range.
With dFirst.Resize(dRows,sRng.Columns.Count)
.Interior.Color = xlNone
With .Font
.Name = "Arial"
.Size = 10
'.Bold = True
End With
End With
End Sub
A,B在一个任务中创建,C,D在另一个任务中创建。现在,我们只需要从D切换到B而无需创建B的新实例。还可以在不创建D的新实例的情况下从A切换到D。
任务1:A> B 任务2:C> D
编辑:这两个堆栈来自同一应用程序。我使用两个的原因是一个是我的常规应用程序,另一个是我的应用程序中的视频通话功能。这样用户可以进行视频通话并最小化窗口并使用应用程序的正常流程。
解决方法
我认为您应该在活动B和活动D上设置标志FLAG_ACTIVITY_REORDER_TO_FRONT
。如果这些活动是先前创建的,则它们将从活动堆栈中移到最前面。
我假设您不想使用Intent,因为每当您使用Intent进行活动时,按Back键将移至上一个活动(活动C)。在这种情况下,我建议您添加FLAG_ACTIVITY_CLEAR_TOP标志。它将破坏先前的所有活动,并让您转到活动A。
Intent a = new Intent(this,A.class);
a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(a);
或者,您也可以尝试使用FLAG_ACTIVITY_REORDER_TO_FRONT标志,该标志将移至活动A,而不会清除任何活动。
或者如果您不想创建新实例,那么
在AndroidManifest.xml中将活动的launchMode设置为singleInstance
希望这会有所帮助。
或
1。)使B成为“ SingleTask”活动。您可以在Android清单中执行此操作。简而言之,这意味着此任务中将仅存在B的一个“实例”。如果B在被调用时已经在运行,那么它将被简单地带到前面。这就是您的做法。
<activity
android:name=".ui.MyActivity"
android:launchMode="singleTask"/>
但是您不想只将B放在前面。您想“退回”到B,以便您的堆栈看起来像
A-> B
2。)将此标志添加到“开始” B的意图中。这确保删除了C和D。
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
现在,当“ D”向B调用新的Intent时,B将恢复,而C和D将被删除。 B将不会重新创建,它只会调用onNewIntent。
OR
您使用StartActivityForResult()启动活动
并根据条件在“活动”中设置“结果代码”。类似这样的东西。
GO_TO_ACT_A = 1; GO_TO_ACT_B = 2;
然后在所有活动的onActivityResultMethod中检查结果代码。
if(resultCode==GO_TO_ACT_A){
finish(); //Assuming curently you are in Activity C and wanna go to Activity A
}