-
先准备
HomeFragment
和DetailFragment
两个Fragment
。 -
新建
navigation
布局文件。在res
的目录中点击鼠标右键,再点击new
,然后选择Android Resource File
,这是出现了下面的对话框:
New Resource File
-
点击按钮会自动出现我们新建的
Fragment
,选中添加即可,具体的操作看官方教程:
添加 Fragment
接下来进行连线,如果希望从homeFragment
跳转到detailFragment
,那么就像我图中一样即可。 -
将整个
Navigation
添加到Activity
对应的xml
布局文件中,代码如下:
<?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"
tools:context=".MainActivity">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:defaultNavHost="true"
app:navGraph="@navigation/stack" />
</androidx.constraintlayout.widget.ConstraintLayout>
其中 app:navGraph="@navigation/stack"
就是上面配置的 navigation
文件名。此时 Activity
已经有这两个页面了。
- 实现从
HomeFragment
跳转到DetailFragment
。虽然在上面已经连接起来了,但这并不代表就能进行跳转,因为并不知道是点击什么进行触发的,此时需要在HomeFragment
对应的xml
文件中配置一个按钮:
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
然后在 HomeFragment.java
文件中添加下面的代码:
@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
super.onViewStateRestored(savedInstanceState);
Button button = requireView().findViewById(R.id.button);
button.setOnClickListener((v) -> {
NavController controller = Navigation.findNavController(v);
controller.navigate(R.id.toDetailPage);
});
}
这里的 NavController
专门负责操作 Navigation
的类。负责跳转的 navigate
的方法:
public void navigate(@IdRes int resId) {
navigate(resId, null);
}
其中的 resId
可以看先前创建的 navigation/
下的 xml
文件,点击图中连接的线,然后就可以在 Attributes
中看到 id
的那一栏,里面就有对应的,可以自定义,之前操作的时候会自动生成对应的 id
,这里我自定义为: toDetailPage
。
网友评论