我有一个活动,被几个其他活动调用。例如,我有Activity1、Activity2和Activity3。
Activity1调用Activity2并传递参数。
Activity3也调用Activity2并传递参数。
现在,根据调用的活动,Activity2执行一些任务。 我如何知道是哪个活动在调用Activity2?
现在,根据调用的活动,Activity2执行一些任务。 我如何知道是哪个活动在调用Activity2?
startActivityForResult(Intent, int)
启动活动,则可以通过getCallingActivity().getClassName()
获取调用活动的类名。A. 如果你可以使用startActivityForResult
根据下面Zain Ali的回答: 如果你可以通过startActivityForResult()来启动Activity, 那么你可以通过this.getCallingActivity().getClassName()获取调用Activity类的名称。
B. 如果你不能使用startActivityForResult
如果你不能使用startActivityForResult(), 那么你可以使用以下方法: 你可以在意图中传递附加参数,检查活动中的值并相应地执行操作。
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;
}
2) 在调用Activity2时,在意图中添加额外的参数。
Intent act2 = new Intent(context, Activity2.class);
act2.putExtra("calling-activity", ActivityConstants.ACTIVITY_1);
// or ActivityConstants.ACTIVITY_3 if called form Activity3
startActivity(act2);
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;
}
Intent i = new Intent(FirstActivity.this, SecondActivity.class);
i.putExtra("classFrom", FirstActivity.class.toString());
startActivity(i);
在被调用的活动(SecondActivity)的onCreate中添加以下代码:
Bundle bundle = getIntent().getExtras();
if (bundle.getString("classFrom").equals(FirstActivity.class.toString())) {
//Do some task
}
Activity
。我正在使用这行代码
if (((((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE)).getRunningTasks(1).get(0).baseActivity)).compareTo(new ComponentName(getPackageName()
, AnyActivityWantToCheck.class.getName())) == 0){
// do somthing .....
}
希望它能与你一起工作
将任何东西(字符串/整数等)传递给putExtra,然后根据它来完成你的工作,例如:
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("PARENT_ACTIVITY_REF", "ParentActivityIsA");
startActivity(intent);
然后以子类的形式接收
String parentActivityRef = intent.getStringExtra("PARENT_ACTIVITY_REF");
然后
if (parentActivityRef.equals("ParentActivityIsA"){
// do your work here
}else if ...{
// ...
}else{
//...
}
另一种解决方案是使用伴生对象,如下例所示:
class MainActivity: BaseActivity {
...
LoginActivity.callerActivity = this
it.context.startActivity(Intent(getActivity(), LoginActivity::class.java))
...
}
class LoginActivity : BaseActivity() {
companion object {
var callerActivity: AppCompatActivity? = null
}
...
callerActivity?.let {
it.callSomething()
}
}
我成功地使用:(Activity).getLocalClassName()