我正在开发一个带ActionBars的应用程序,它支持Gingerbread及以上版本。所以基本上我正在使用支持库并扩展
ActionBarActivity
我的所有活动。除了
之外,一切运作良好方法。它只是没有按照文档中的说明进行调用。
只要用户选择向上导航,就会调用此方法 操作栏中的应用程序活动层次结构。
这很容易,但我无法弄清楚为什么它没有按预期工作,也没有谷歌搜索帮助。这是一个错误吗?或者我错过了什么?
答案 0 :(得分:18)
如果您覆盖onOptionsItemSelected
,则不会调用onSupportNavigateUp
。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// handle ⬅️ button here
break;
}
return true;
}
答案 1 :(得分:7)
您是否在Manifest.xml文件中设置了父活动?如果是,则不会被呼叫。 @see http://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html#onSupportNavigateUp()
答案 2 :(得分:6)
如前所述,如果您覆盖OnOptionsItemSelected
,则不会调用OnSupportNavigateUp
。你可以通过在OnOptionsItemSelected
中添加一个default:case来确保它被调用,如下所示:
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);
}
}
super.onOptionsItemSelected(item)
将确保调用OnSupportNavigateUp
。这是因为您不希望在OnOptionsItemSelected
答案 3 :(得分:2)
谁知道...... onSupportNavigateUp()
仅适用于4.0及以上版本。对于onNavigateUp()
以下的名称。
答案 4 :(得分:1)
从onCreateOptionsMenu()返回true也很重要,因为我有自定义菜单,所以我将此设置为false,但是未调用onOptionsItemSelected()!
因此使用:
override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; this adds items to the action bar if it is present.
//menuInflater.inflate(R.menu.main, menu)
return true
}
然后
override fun onOptionsItemSelected(item: MenuItem): Boolean {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
when (item.itemId) {
R.id.action_share -> return true
else -> return super.onOptionsItemSelected(item)
}
}
答案 5 :(得分:0)
我遇到了相同的问题 onSupportNavigateUp 和 onOptionsItemSelected 没有打电话
我需要防止子片段上的backPress,所以我覆盖了工具栏上的setNavigationOnClickListener
toolbar.setNavigationOnClickListener {
if(childFragmentHandleBackPressed()){
NavigationUI.navigateUp(
navController,
AppBarConfiguration(navController.graph, drawerLayout)
)
}
}
,或者如果您不想在开始/根目录片段
上打开导航抽屉菜单,则可以使用 navController.navigateUp()答案 6 :(得分:0)
所以实际上,当您覆盖 onOptionsItemSelected
时,默认情况下您应该返回 false
以调用 onSupportNavigateUp
方法。见下文
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.action_print -> {
doSomething()
return true
}
}
return false
}
override fun onSupportNavigateUp(): Boolean {
onBackPressed()
return true
}
答案 7 :(得分:-1)
您需要在 onCreate() 方法中添加这一行
supportActionBar?.setDisplayHomeAsUpEnabled(true)
连同 onSupportNavigateUp()
方法