我正在使用Actionbar和它的“向上”按钮从详细活动返回到主要活动,这很好。同样,用户可以按系统“返回”按钮返回主活动。
在我的主要活动中,onCreate()
数据从互联网上下载,以便在应用开始时显示。我注意到当我使用Actionbar“向上”按钮从详细信息转到主要活动时,运行onCreate()
,重新下载数据。但是当我使用系统“后退”按钮时,onCreate()
不会运行,因此会立即显示主要活动视图。
我在详细活动中用来实现“向上”按钮的代码是:
switch (item.getItemId()) {
case android.R.id.home:
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
我希望“向上”按钮的行为类似于“后退”按钮,而不是重新运行onCreate()
。但是我不确定如何实现这一点,或者“后退”按钮实现哪些代码路径以返回主活动。
谢谢!
答案 0 :(得分:49)
而不是开始一个全新的活动,只需完成您所在的详细活动
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
然后您将返回活动堆栈上的上一个活动(您的主要活动),并且不应该调用onCreate
答案 1 :(得分:9)
如果你想完全按照Back做的话,你可以这样做:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
default:
break;
}
return super.onOptionsItemSelected(item);
}
请注意onBackPressed()
的默认实现仅调用finish()
,但可以覆盖onBackPressed
。
答案 2 :(得分:8)
我认为可以在this post中找到更好的解决方案。
调用finish()
在特定情况下有效,但可能并不总是产生in the documentation所描述的行为,例如:
致电
Intent intent = NavUtils.getParentActivityIntent(this);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
NavUtils.navigateUpTo(this, intent);
您将返回您离开状态的父活动。如果你有一个扁平的应用程序结构,它仍然会像后退按钮一样。
答案 3 :(得分:0)
真正的家庭"功能,你应该看到api演示,在"应用程序/活动/重新排序活动"
原因:如果您有类似这样的内容:activity1-> activity2-> activity3,现在您希望通过按操作栏上的主页按钮转到activity1?
答案 4 :(得分:0)
我认为最简单的方法是覆盖" getParentActivityIntent"详细活动的方法添加标志" Intent.FLAG_ACTIVITY_CLEAR_TOP":
@Nullable
@Override
public Intent getParentActivityIntent() {
Intent intent = super.getParentActivityIntent();
if (intent != null) {
return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
}
return intent;
}
答案 5 :(得分:0)
还有另一种解决方案可供某人使用。当用户按下Back和ActionbarBack按钮时,我有相同的双重行为。 Back btn行为我很好。我不想要重新创建一个活动。所以我重写了方法
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
适合我的工作