【问题标题】:Back button is not working properly in Right side of action bar操作栏右侧的后退按钮无法正常工作
【发布时间】:2015-01-30 08:43:26
【问题描述】:

我只想在操作栏的右侧添加返回按钮,我找到了很多链接。

这是我的代码,它是 app->res->menu->main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/backAction"
android:icon="@drawable/ic_launcher"
android:title="back"
android:showAsAction="always"/>
</menu>

Optionmenuactivity.java

创建事件:

ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);

onoptionItemselected()

public boolean onOptionsItemSelected(MenuItem item) {

    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }

    switch (item.getItemId()) {

        case R.id.backAction:
            this.finish();
            return true;

        default:
            return super.onOptionsItemSelected(item);
    }

}

清单文件:

 <meta-data
    android:name="android.support.PARENT_ACTIVITY"
    android:value="com.example.app.MainActivity" />

这段代码有问题:

活动流程为:(Main)Activity1-> Activity2 ->Activity3 ->Activity4

在 Activity4 之后,如果我们按下后退按钮,它应该在 Activity3 上运行,但是使用这段代码,它会转到 Mainactivity,即 Activity1

请帮帮我..谢谢

【问题讨论】:

  • 如何开始活动?
  • 你为什么要完成而不是调用 onBackPressed() case R.id.backAction: onBackPressed();返回真;

标签: android android-studio


【解决方案1】:

这里有很多问题。

首先我推荐你,了解Back和Up之间的区别

Up navigation explained with examples Back navigation explained with examples

其次,要理解代码中发生的事情并不容易,但据我所知,您尚未在 manifest.xml 中声明父元素。

这是一个很好的简单例子:

    <!-- Parent activity meta-data to support 4.0 and lower -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.myfirstapp.MainActivity" />

父活动定义可以让您的生活更轻松。通过这种方式,您可以定义将在 UP NAVIGATION 交互时加载的活动。

希望有帮助:)

【讨论】:

  • 谢谢您的回答,但我已经通过了,在这里我已经编辑了我的问题,请参考..此代码的唯一问题是它没有进入上一个屏幕,它直接通过主(主页)屏幕..我不想要那个输出..请给我适当的解决方案..谢谢
  • Vidhi,我想你不明白我的意思。每个活动都必须有这个 标签,你必须在那里指定,例如Activity 4 有父 Activity 3;活动 3 有父活动 2,依此类推。此外,您可以检查您是否不只是完成()这些活动,当向上按钮尝试完成他的工作时,这些活动不再可用,这就是它打开活动 1 的原因:)
  • 是的..知道了..非常感谢@stuci..我今天真的了解了新事物..实际上我是android开发的新手..再次感谢:)
  • 没问题 :) 随意提问,顺便将问题/答案标记为已回答,以便社区也可以查看 :)
【解决方案2】:

首先我想说的是,您尝试做的不是一个好习惯,如果 Android 设备的屏幕底部已经有一个后退按钮并且您可以打开,为什么还要在操作栏中添加一个后退按钮操作栏左侧的向上导航?

自定义应用程序导航会使您的代码混乱,让用户感到困惑,而且大多数情况下都是丑陋的。

但如果你真的需要一个按钮来进行导航,你希望它能够访问标准的 android 导航方法。

后退导航:

只需使用标准的 android 后退操作onBackPressed()

   public boolean onOptionsItemSelected(MenuItem item) {

   if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }

    switch (item.getItemId()) {

        case R.id.backAction:
            onBackPressed();
            return true;

        default:
            return super.onOptionsItemSelected(item);
    }

 }

如果这个函数没有做你想做的事,你可以用你自己想要的行为覆盖它。

向上导航:

   public boolean onOptionsItemSelected(MenuItem item) {

   if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }

    switch (item.getItemId()) {

        case R.id.backAction:
            NavUtils.navigateUpFromSameTask(this);
            return true;

        default:
            return super.onOptionsItemSelected(item);
    }

 }

您必须在清单中配置您的父 Activity,但正因为如此,此 Navigation 的行为更容易更改。

【讨论】:

  • 感谢您的回答,但由于客户希望这就是我想要这样做的原因..还有一个问题:我应该在清单中添加 吗?
  • 另一个答案也很有帮助。尝试阅读上/后导航,确定哪个更适合您的情况。如果您想使用向上导航,则必须添加父活动元数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
  • 2015-11-09
  • 1970-01-01
相关资源
最近更新 更多