Android Actionbar向上按钮与系统后退按钮
我正在使用Actionbar和它的“up”按钮从一个细节活动返回到主活动,这很好。类似地,用户可以按系统“后退”按钮返回到主活动 在我的主要活动中,在Android Actionbar向上按钮与系统后退按钮,android,android-actionbar,Android,Android Actionbar,我正在使用Actionbar和它的“up”按钮从一个细节活动返回到主活动,这很好。类似地,用户可以按系统“后退”按钮返回到主活动 在我的主要活动中,在onCreate()中,从internet下载数据,以便在应用程序启动时显示。我注意到,当我使用Actionbar“up”按钮从细节转到主要活动时,onCreate()运行,重新下载数据。但是当我使用系统“后退”按钮时,onCreate()没有运行,因此立即显示主活动视图 我在详细信息活动中用于实现“向上”按钮的代码是: switch (item.
onCreate()
中,从internet下载数据,以便在应用程序启动时显示。我注意到,当我使用Actionbar“up”按钮从细节转到主要活动时,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;
我希望“up”按钮的行为与“back”按钮类似,并且不重新运行onCreate()
。但我不确定如何实现这一点,也不确定“后退”按钮实现了哪个代码路径以返回到主活动
谢谢 不要开始一个全新的活动,只需完成您正在进行的详细活动即可
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
然后,您将返回到活动堆栈上的上一个活动(您的主要活动),并且不应调用onCreate。对于真正的“主页”功能,您应该在“应用程序/活动/重新排序活动”下看到api演示
原因:如果您有如下内容:activity1->activity2->activity3,现在您希望通过按操作栏上的“主页”按钮转到activity1,该怎么办 我认为可以在中找到更好的解决方案 调用
finish()
打电话
Intent intent = NavUtils.getParentActivityIntent(this);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
NavUtils.navigateUpTo(this, intent);
您将以离开父活动的状态返回该父活动。如果你有一个扁平的应用程序结构,它仍然会像“后退”按钮一样工作。如果你想让Up完全像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
可以被覆盖。我认为最简单的方法是覆盖细节活动的“getParentActivityIntent”方法,添加标志“Intent.flag\u activity\u CLEAR\u TOP”:
有另一种解决方案可以为某人提供。当用户按下Back和ActionbarBack按钮时,我也有同样的双重行为。我对背部btn的行为很好。我不希望重新创建活动。所以我否决了这个方法
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
对我来说很好DOH!为什么我没想到呢?我想我是想太接近文档了。。。。谢谢这并不总是正确的解决方案。有时,活动从另一个应用程序启动,up
应该启动父活动。这里有更多信息:是的,但在谷歌解决方案中,onCreate
即使在堆栈中的活动出现时也会调用,你知道如何在活动已经存在时使用模拟“返回”功能,否则就创建一个吗?@shem知道已经很晚了(可能有一天会对某些人有所帮助)在你的父活动上使用android:launchMode=“singleTop”
@穆罕默德·巴巴尔非常感谢你!也许这个答案与问题的100%不符,但这正是我最初寻找的优雅而简单的方式!我只有两项活动,主要的和详细的。我总是想从详细的活动回到主要的活动。我喜欢使用Actionbar主页按钮作为另一种(直观的)方法返回“主页”屏幕,在这种情况下是主要活动。即使如此,您也可以通过不关闭来减少打开第二个活动的时间。可以接受的答案应该是此活动的副本,因为它将涵盖所有可能的情况,谢谢@andyth这与清单中的设置singleTop
相同,只是以编程方式。回答不错虽然你的图表很有道理,但截至2016年8月23日,最新的Gmail应用程序的ActionBar/工具栏后退箭头和system back按钮的行为都是一样的
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}