【问题标题】:Why is onBackPressed() not being called?为什么不调用 onBackPressed() ?
【发布时间】:2014-11-21 02:54:02
【问题描述】:

我正在尝试覆盖 onBackPressed()。但是,当我单击操作栏中的后退按钮时,它似乎没有检测到。

我目前有这个代码:

@Override
public void onBackPressed()  {

    Log.i("DATA", "Hit onBackPressed()");
    super.onBackPressed();

}

日志消息永远不会出现在 LogCat 中。我知道这个日志语句是有效的,因为它是从另一个方法复制而来的,并且在 LogCat 中显示了不同的消息。

我已经搜索了答案,我尝试使用 onKeyDown 并检测是否是单击了 BACK 按钮,但我仍然遇到同样的问题。 项目信息:

  • Android Studio 0.9.3
  • 方法位于空白活动中
  • 目标 SDK 21
  • 最小 SDK 15
  • 测试设备是三星 Galaxy 5(不是模拟器)

任何帮助将不胜感激!

编辑:

这是我的工作代码的副本(这是测试代码,因此活动名称不是描述性的):

public class MainActivity2 extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_activity2);
    getActionBar().setDisplayHomeAsUpEnabled(true);//Displays the back button
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main_activity2, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:

            Log.i("DATA", "Hit Actionbar Back Button");

            return true;

        default:
            return super.onOptionsItemSelected(item);
    }
}

}

消息“Hit Actionbar Back Button”现在出现在 LogCat 中。

【问题讨论】:

标签: android android-studio


【解决方案1】:

onBackPressed() 在用户单击硬件后退按钮(或导航栏中的“向上”按钮)时调用,而不是操作栏中的按钮。为此,您需要覆盖 onOptionsItemSelected() 方法。示例:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            // click on 'up' button in the action bar, handle it here
            return true;

        default:
            return super.onOptionsItemSelected(item);
    }
}    

【讨论】:

  • 它不一定是硬件按钮,它也适用于导航栏中的软返回按钮。
  • @Lars 哎呀,好话!到目前为止,我拥有的所有安卓手机都有硬件导航按钮,因此我总是忘记导航栏中的按钮。
  • 谢谢,这让我免于解决错误的问题。
  • 在花了这么多时间之后,我找到了这个答案,感谢它成功了。
【解决方案2】:

请试试这个代码,

public class MainActivity2 extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}


@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();

    Toast.makeText(getApplicationContext(), "back press is call", Toast.LENGTH_LONG).show();
}
}

【讨论】:

  • Toast 仍然没有出现。 @aga 有正确的答案。谢谢!
  • @kkimble006 你能分享你的活动完整代码吗?
  • @kkimble006 我在手机和模拟器中测试了这段代码,它工作正常,请检查一下。
  • 我测试了这段代码,它确实适用于硬件后退按钮。我的兴趣是覆盖操作栏后退按钮。此代码不适用于此(我测试过)。无论如何谢谢@KrunalI!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
  • 2017-08-14
相关资源
最近更新 更多