Android 未调用onSupportNavigateUp()
我正在开发一个带有ActionBars的应用程序,它支持姜饼和其他东西。所以我基本上是在使用支持库和扩展 行动性 为了我所有的活动。除了那辆车外,一切都很好 方法。只是没有按照文档中的说明调用它 只要用户选择在中向上导航,就会调用此方法 从操作栏中选择应用程序的活动层次结构Android 未调用onSupportNavigateUp(),android,Android,我正在开发一个带有ActionBars的应用程序,它支持姜饼和其他东西。所以我基本上是在使用支持库和扩展 行动性 为了我所有的活动。除了那辆车外,一切都很好 方法。只是没有按照文档中的说明调用它 只要用户选择在中向上导航,就会调用此方法 从操作栏中选择应用程序的活动层次结构 这很容易,但我还没有弄明白为什么它不能像预期的那样工作,谷歌搜索也帮不上忙。这是虫子吗?还是我遗漏了什么?谁知道onSupportNavigateUp()仅适用于4.0及以上版本。对于以下内容,调用onNavigateUp
这很容易,但我还没有弄明白为什么它不能像预期的那样工作,谷歌搜索也帮不上忙。这是虫子吗?还是我遗漏了什么?谁知道
onSupportNavigateUp()
仅适用于4.0及以上版本。对于以下内容,调用onNavigateUp()。是否在Manifest.xml文件中设置了父活动?如果是,它将不会被调用@请参见如果您覆盖了选定的选项项,则将不会调用支持导航EUP上的
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// handle ⬅️ button here
break;
}
return true;
}
如前所述,如果覆盖选项项Selected,则不会调用支持导航EUP。您可以通过在
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
。这是为了防止您不希望在您的onoptionItemSelected
中处理该案例。从onCreateOptions菜单()返回true也很重要,我将此设置为false,因为我有自定义菜单,但没有调用onoptionItemSelected()
因此,请使用:
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)
}
}
我在SupportNavigateUp上遇到了相同的问题,并且选择的选项项未调用 我需要防止子片段上的反压,以便覆盖工具栏中的setNavigationOnClickListener
toolbar.setNavigationOnClickListener {
if(childFragmentHandleBackPressed()){
NavigationUI.navigateUp(
navController,
AppBarConfiguration(navController.graph, drawerLayout)
)
}
}
或者您可以使用navController.navigateUp()如果您不想在开始/根片段上打开导航抽屉菜单,则需要在onCreate()方法中添加此行
与on
onSupportNavigateUp()
method一起使用,因此实际上,当您重写OnOptions ItemSelected时,默认情况下应返回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
}
是否启用了向上按钮
getActionBar()。setDisplayHomeAsUpEnabled(true)代码>它实际上是getSupportActionBar()
对我来说是的,它是在onCreate()上调用的。
OK我刚刚注意到它在运行Android 2.3的Nexus One上被正确调用,但在任何高于4.0的设备上都没有。我不能证实这一点onSupportNavigateUp()
在API 10仿真器和API 18设备上为我调用,正如它应该调用的那样。因此,要么使用较旧/有缺陷的ActionBarCompat
库,要么正在进行其他操作。当使用ActionBarActivity
时,所有API级别都会调用onSupportNavigateUp()
。Hey@Estorino感谢您的回复。这个问题在很久以前就发布了,坚持我上面提到的解决方案(或者只是一个补丁)到目前为止对我很有效。谢谢你的帮助。:)我当时也有同样的问题,没有透露问题的日期(如果返回true
,则实际情况就是这样,否则将调用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
}