未调用onSupportNavigateUp()

Jan*_*haR 13 android

我正在开发一个带ActionBars的应用程序,它支持Gingerbread和up.所以基本上我正在使用支持库并进行扩展

ActionBarActivity

我所有的活动.一切都很好,除了

onSupportNavigateUp()

方法.它只是没有按照文档中的说明进行调用.

只要用户选择从操作栏中在应用程序的活动层次结构中向上导航,就会调用此方法.

这很容易,但我无法弄清楚为什么它不能按预期工作,也没有谷歌搜索帮助.这是一个错误吗?还是我错过了什么?

lao*_*yur 26

如果覆盖onOptionsItemSelected,则onSupportNavigateUp不会被调用.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                // handle ?? button here 
                break;
        }
        return true;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您返回“true”,实际上就是这种情况,否则将调用“onSupportNavigateUp”。 (5认同)

Ima*_*nol 8

您是否在Manifest.xml文件中设置了父活动?如果是,则不会被调用.@see http://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html#onSupportNavigateUp()


Col*_*onD 6

如前所述,如果覆盖OnOptionsItemSelected,OnSupportNavigateUp将不会被调用.你可以通过添加一个default:case来确保它被调用,OnOptionsItemSelected所以:

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.something:
            Intent intent = new Intent(this,someActivity.class);
            startActivity(intent);
            finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
Run Code Online (Sandbox Code Playgroud)

super.onOptionsItemSelected(item)将确保OnSupportNavigateUp被调用.这是为了你不希望案件在你的内部处理OnOptionsItemSelected


Jan*_*haR 3

谁知道...onSupportNavigateUp()仅适用于 4.0 及以上版本。对于下面onNavigateUp()的调用。