Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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中的物理后退按钮相同?_Android_Back - Fatal编程技术网

如何使后退图标的行为与Android中的物理后退按钮相同?

如何使后退图标的行为与Android中的物理后退按钮相同?,android,back,Android,Back,我有main活动和second活动 AndroidManifest.xml 当我点击SecondActivity的后退图标时,更有可能是MainActivity被推到SecondActivity上。相反,物理后退按钮将弹出SecondActivity并返回到MainActivity 如何使后退箭头图标的行为与物理后退按钮相同?根据谷歌的指导原则,物理后退按钮和图标后退按钮的工作方式不应该相同。但如果要更改其行为,则需要通过执行以下操作来覆盖其功能: 在您的第二个活动中,覆盖选项ItemSe

我有
main活动
second活动

AndroidManifest.xml


当我点击
SecondActivity
的后退图标时,更有可能是
MainActivity
被推到
SecondActivity
上。相反,物理后退按钮将弹出
SecondActivity
并返回到
MainActivity


如何使后退箭头图标的行为与物理后退按钮相同?

根据谷歌的指导原则,物理后退按钮和图标后退按钮的工作方式不应该相同。但如果要更改其行为,则需要通过执行以下操作来覆盖其功能:

在您的第二个活动中,覆盖选项ItemSelected

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        onBackPressed();    //Call the back button's method
        return true;
    }

    return super.onOptionsItemSelected(item);
}
您还需要从清单中删除
android:parentActivityName=“.MainActivity”
,但为了避免删除后退图标,您需要将其设置为启用状态:

@Override
public boolean onCreate(Bundle savedInstanceState) {

    ...

    ActionBar actionBar = getActionBar();  //Make sure you are extending ActionBarActivity
    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setHomeButtonEnabled(true);

    //It's also possible to use getSupportActionBar()
}

要实现此行为,您可以将MainActivity的启动模式定义为单顶活动。通过添加以下行,可以轻松地在清单中完成此操作:

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:launchMode="singleTop" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity
    android:name=".SecondActivity"
    android:label="@string/title_activity_second_activitity"
    android:parentActivityName=".MainActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity" />
</activity>


如果您想支持API 15及更低版本,我建议您也在SecondActivity中添加元数据元素,正如您在上文中所看到的。

您需要添加3项内容来定义您希望在返回时按下的活动,而不是将该活动推到堆栈上,并使返回按钮与物理返回按钮的行为相同

1。当按下
后退按钮时,定义要进入的活动

@Override
public void onBackPressed(){
    Intent i = new Intent(getApplicationContext(), MainActivity.class);
    startActivity(i);
    finish();
}
在您的
清单
文件的
活动
标记中包括

<activity
        android:name=".SecondActivity"
        android:parentActivityName=".MainActivity" >
        <meta-data              //Use meta-data if you are using support library
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity" />
3.使用
showHomeAsUpEnabled()
在操作栏中设置后退按钮


ActionBar().setDisplayHomeAsUpEnabled(true)
getSupportActionBar().setDisplayHomeAsUpEnabled(true)如果您使用的是支持库。

卡洛斯的答案有效。我认为还有另一种更直接的方法:只需将单击侦听器直接添加到后退图标

toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
        finish();
        }
    });

您好,卡洛斯,我尝试了您的解决方案,但在这种情况下,如果我从清单中删除
android:parentActivityName=“.MainActivity”
,返回图标将消失。@CarlosJ,请分享官方文档或android开发者博客中的相关参考资料:
根据谷歌的指导原则,物理后退按钮和图标后退按钮不应该以相同的方式工作。
没关系,我发现了。你是说actionbar的后退按钮吗?是的,Apurva。我说的是actionbar的back按钮。这是用于从底部视图中按下的背面的其他选项卡切换到第一个选项卡
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
        finish();
        }
    });
@Override
    public void onBackPressed() {
       int mCount = pager.getCurrentItem();

        if(mCount>0){
            pager.setCurrentItem(0,false);
            firsticon.setBackgroundColor(Color.parseColor("#2B8C57"));
            secondicon.setBackgroundColor(Color.TRANSPARENT);
            thirdicon.setBackgroundColor(Color.TRANSPARENT);
            fourthicon.setBackgroundColor(Color.TRANSPARENT);
            fifthicon.setBackgroundColor(Color.TRANSPARENT);

        }else{
            this.finish();
        }

    }