Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Actionbar向上按钮与系统后退按钮_Android_Android Actionbar - Fatal编程技术网

Android Actionbar向上按钮与系统后退按钮

Android Actionbar向上按钮与系统后退按钮,android,android-actionbar,Android,Android Actionbar,我正在使用Actionbar和它的“up”按钮从一个细节活动返回到主活动,这很好。类似地,用户可以按系统“后退”按钮返回到主活动 在我的主要活动中,在onCreate()中,从internet下载数据,以便在应用程序启动时显示。我注意到,当我使用Actionbar“up”按钮从细节转到主要活动时,onCreate()运行,重新下载数据。但是当我使用系统“后退”按钮时,onCreate()没有运行,因此立即显示主活动视图 我在详细信息活动中用于实现“向上”按钮的代码是: switch (item.

我正在使用Actionbar和它的“up”按钮从一个细节活动返回到主活动,这很好。类似地,用户可以按系统“后退”按钮返回到主活动

在我的主要活动中,在
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;
}