安卓如何获取前一个活动页面

50

我有2个活动:Activity1Activity2。在每个活动中都有一个按钮,可以将我带到第三个活动(MainActivity)。在MainActivity中,我想知道是从哪个活动页面调用的。


+1 - 同意 @variant-45 的观点,从调用方的“Activity”中放置一个int或其他标志。 - Adil Soomro
添加活动标志以识别,然后将意图放入MainActivity中,请把代码放在问题中..这样任何人都可以从回复中得到想法。 - Jigar Patel
可能是重复的问题:https://dev59.com/cW445IYBdhLWcg3wO31u - Aman Deep Gautam
5个回答

56
你可以使用Intent的putExtra属性来传递Activity的名称。 调用Activity,
Intent intent = new Intent(this, Next.class);
intent.putExtra("activity","first");
startActivity(intent);

下一个活动(Next Activity),

Intent intent = getIntent();
String activity = intent.getStringExtra("activity");

现在在字符串活动中,你将会得到它来自哪个Activity的名称。


1
如果调用的Activity不是来自同一个应用程序? - William
但是,如果您重构活动的名称,则可能会错过它。我更喜欢内置的东西。从Android API调用方法。类似于“getCallingActivity()”。 - mayid

23

您可以使用:

public ComponentName getCallingActivity()

了解是哪个Activity调用了当前的Activity


42
只有在使用 startActivityForResult() 启动活动时才起作用,而不是 startActivity() - Anubian Noob

6
使用putExtra()方法来标识前一个活动。
Intent i = new Intent(Activity1.this, MainActivity.class).putExtra("from", "activity1");
startActivity(i);

要检查主活动中的活动,请执行以下操作:

if(getIntent().getStringExtra("from").equals("activity1")){
//From Activity 1
}else {
// Activity 2
}

0

当您从一个活动转移到另一个活动时,可以按照以下方式传递活动名称

Intent i = new Intent(this, deliveries.class);
i.putExtra("ActivityName", "ActivityOne");
startActivity(i);

并在另一个活动中检查活动名称

Bundle extra = getIntent().getExtras();
String activityName = Long.parseLong(extra.getSerializable("ActivityName")
toString());

我认为它可以解决你的问题


0

当你启动你的活动:

Intent intent = new Intent(activity, HistoryDetailsResults.class);
 intent.putExtra(Activity.ACTIVITY_SERVICE, activity.getLocalClassName());
 activity.startActivity(intent);

使用 Activity.ACTIVITY_SERVICE,我认为您正在使用良好的实践。 (Activity.ACTIVITY_SERVICEString :'activity')

activity.getLocalClassName() 返回此值:view.YourActivity 作为 String

编辑:与其使用 activity activity.getLocalClassName(),我更喜欢使用 activity.getClass().getSimpleName()

在您的启动活动中的第一步

Intent intent = new Intent(activity, HistoryDetailsResults.class);
 intent.putExtra(Activity.ACTIVITY_SERVICE, activity.getClass().getSimpleName());
 activity.startActivity(intent);

在你的目标活动中的第二步

Intent intent = getIntent();
String startActivity = intent.getStringExtra(Activity.ACTIVITY_SERVICE)
String activityToCompare = YourActivityToCompare.class.getSimpleName()

你想要做什么:

if( startActivity.equalsIgnoreCase(activityToCompare) {
    //Do what you want
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接