kan*_*oid 32 android android-activity
我有一项活动,很少有其他活动.例如:我有Activity1,Activity2,Activity3.Activity1调用Activity2并传递参数.Activity3还调用Activity2并传递参数.
现在基于调用活动,Activity2执行一些任务.但是我怎么知道哪个活动正在调用Activity2?任何人都可以帮助我?
Zai*_*Ali 55
如果你开始活动startActivityForResult(Intent, int)
,那么你可以通过以下方式获得呼叫活动getCallingActivity().getClassName()
.
Uda*_*yan 34
A.如果可以使用startActivityForResult
根据Zain Ali的回答如下:如果你可以使用startActivityForResult()启动Activity,那么你可以通过this.getCallingActivity()获取调用Activity类的名称.getClassName();
B.如果你不能使用startActivityForResult
如果您不能使用startActivityForResult(),那么您可以使用以下方法:您可以在intent中传递其他参数,检查活动中的值并相应地执行操作.
1)定义接口或常量类以定义整数常量以指示调用活动
public interface ActivityConstants {
public static final int ACTIVITY_1 = 1001;
public static final int ACTIVITY_2 = 1002;
public static final int ACTIVITY_3 = 1003;
}
Run Code Online (Sandbox Code Playgroud)
2)在调用Activity2时在intent中添加额外参数.
Intent act2 = new Intent(context, Activity2.class);
act2.putExtra("calling-activity", ActivityConstants.ACTIVITY_1);
// or ActivityConstants.ACTIVITY_3 if called form Activity3
startActivity(act2);
Run Code Online (Sandbox Code Playgroud)
3)检查Activity2中这个额外参数的值并相应地采取行动.
int callingActivity = getIntent().getIntExtra("calling-activity", 0);
switch (callingActivity) {
case ActivityConstants.ACTIVITY_1:
// Activity2 is started from Activity1
break;
case ActivityConstants.ACTIVITY_3:
// Activity2 is started from Activity3
break;
}
Run Code Online (Sandbox Code Playgroud)
在您的通话活动(FirstActivity)中:
Intent i = new Intent(FirstActivity.this, SecondActivity.class);
i.putExtra("classFrom", FirstActivity.class.toString());
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
并在被调用活动的onCreate中添加以下代码(SecondActivity):
Bundle bundle = getIntent().getExtras();
if (bundle.getString("classFrom").equals(FirstActivity.class.toString())) {
//Do some task
}
Run Code Online (Sandbox Code Playgroud)
请注意,您应该小心,因为当您执行"b.getString("classFrom")"时,bundle对象不能为null.
归档时间: |
|
查看次数: |
48886 次 |
最近记录: |