如何解决为什么默认情况下后退按钮不起作用
我正在学习 nav_graph 功能并创建了一个新片段 (AddNoteFragment)。在导航设计 UI 中编辑后,是的,我可以从 NoteFragment 导航到 AddNoteFragment,并且左上角有一个后退图标(向左箭头)。我假设它是由框架本身处理的,如果我单击按钮,它应该能够将我导航回去。请看下面的截图。 但实际上它在我点击时没有任何动作。我搜索了类似的问题并尝试覆盖“onOptionsItemSelected”,但没有成功。我还没有尝试的一件事是在片段中添加新的工具栏,因为我认为我不必这样做。应该有一种方法可以使当前按钮工作。它不应该定义默认行为吗?否则显示图标是什么意思?这是一种常见的行为和要求。
相关代码供大家参考。 片段“navigation_note”是三个底部导航选项卡片段之一。您可以看到我添加了导航到“addNoteFragment”的操作。
<fragment
android:id="@+id/navigation_note"
android:name="com.guo.ultrasecretary.ui.note.NoteFragment"
android:label="@string/title_note"
tools:layout="@layout/fragment_note" >
<action
android:id="@+id/action_navigation_note_to_addNoteFragment"
app:destination="@id/addNoteFragment" />
</fragment>
addNoteFragment 的 java 代码:
public class AddNoteFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
View addNoteView = inflater.inflate(R.layout.fragment_note_add,container,false);
return addNoteView;
}
//tried but not working
/* @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getActivity().onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}*/
}
片段的布局:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/textInputEditText2"
android:layout_width="293dp"
android:layout_height="94dp"
android:hint="Input note here"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:layout_editor_absoluteY="394dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
我使用的是 Android Studio 4.1 并在 AVD Nexus 6 上运行代码。 请帮助纠正我。
解决方法
启用后退按钮
scoped
上班
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
按钮的替代方法
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
this.finish();
return true;
}
return super.onOptionsItemSelected(item);
}
在谷歌上搜索了一下之后,我为你找到了答案。
正如您所说,您在 Fragment 的 actionBar 中有后退按钮。但是,你也说它不起作用。那么,为什么 public boolean onSupportNavigateUp(){
onBackPressed();
return true;
}
实施它?
这是给你的the answer。
android studio
我找到了另一个对您有用的 link,但可能与您的问题不同。
,点击 up button
会触发 onSupportNavigateUp
,如 official docs 中所述,
如果在清单中为此活动指定了父项或其活动别名,则将自动处理默认的向上导航。
实现预期行为覆盖 onSupportNavigateUp
而不是 onOptionsItemSelected
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp()
}
编辑:
Up
和 Back
按钮用于向上导航层次结构,它们之间的区别是
-
Back
,系统按钮(左面三角形),用于在层次结构中向上导航,当在您的应用程序的主屏幕/片段中并按下返回时,您将被导航退出应用。 -
Up
,应用栏中的向左箭头,用于在层次结构中向上导航,但不会使您离开应用。
查看docs了解更多信息
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。