Android Navigation 导航切换fragment用法

对于Android Navigation组件的导航到Fragment,您可以按照以下步骤操作:

首先,在您的项目的build.gradle文件中添加Navigation依赖:

dependencies {
    def nav_version = "2.3.4"
    
    implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
    implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
}

在你的res目录下的navigation文件夹中创建一个nav_graph.xml文件,并定义您的导航图。

<navigation 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:id="@+id/nav_graph"
    app:startDestination="@id/fragment1">

    <fragment
        android:id="@+id/fragment1"
        android:name="com.example.Fragment1"
        android:label="Fragment 1"
        tools:layout="@layout/fragment1"/>

    <fragment
        android:id="@+id/fragment2"
        android:name="com.example.Fragment2"
        android:label="Fragment 2"
        tools:layout="@layout/fragment2"/>

</navigation>

在您的布局文件中,添加NavHostFragment作为导航的目标。

<fragment
    android:id="@+id/nav_host_fragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:defaultNavHost="true"
    app:navGraph="@navigation/nav_graph" />

在您的Activity中,设置导航控制器并处理导航事件。

public class MainActivity extends AppCompatActivity {

    private NavController navController;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 获取NavHostFragment和导航控制器
        NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);
        navController = navHostFragment.getNavController();
    }

    @Override
    public boolean onSupportNavigateUp() {
        // 处理导航返回事件
        return navController.navigateUp() || super.onSupportNavigateUp();
    }
}

现在,您可以在您的代码中使用导航控制器来进行导航。例如,在Fragment中使用findNavController()方法获取导航控制器,并使用navigate()方法导航到其他Fragment。

Button button = view.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Navigation.findNavController(v).navigate(R.id.fragment2);
    }
});

这样就可以通过使用导航组件实现在Fragment之间的导航了。您可以根据自己的需求在导航图中定义多个Fragment,以及在代码中设置不同的导航操作。

你可能感兴趣的:(android)