package com.example.mynavigationdemo; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import androidx.navigation.NavController; import androidx.navigation.Navigation; import androidx.navigation.ui.NavigationUI; public class MainActivity extends AppCompatActivity {<!-- --> @Override protected void onCreate(Bundle savedInstanceState) {<!-- --> super.onCreate(savedInstanceState); setContentView(R. layout. activity_main); NavController navController = Navigation.findNavController(this, R.id.fragment); NavigationUI.setupActionBarWithNavController(this,navController); } @Override public boolean onSupportNavigateUp() {<!-- --> NavController navController = Navigation.findNavController(this, R.id.fragment); return navController.navigateUp(); } }
package com.example.mynavigationdemo; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.navigation.NavController; import androidx.navigation.Navigation; public class HomeFragment extends Fragment {<!-- --> public HomeFragment() {<!-- --> // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {<!-- --> // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_home, container, false); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) {<!-- --> super.onActivityCreated(savedInstanceState); Button button = getView().findViewById(R.id.button); button.setOnClickListener((v)->{<!-- --> /*Bundle args = new Bundle(); args. putString("user_name","jack");*/ Bundle args = new HomeFragmentArgs.Builder() .setUserName("rose") .setAge(18) .build().toBundle(); NavController navController = Navigation. findNavController(v); navController.navigate(R.id.action_homeFragment_to_detailFragment, args); }); } }
package com.example.mynavigationdemo; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.navigation.NavController; import androidx.navigation.Navigation; public class DetailFragment extends Fragment {<!-- --> public DetailFragment() {<!-- --> // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {<!-- --> // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_detail, container, false); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) {<!-- --> super.onActivityCreated(savedInstanceState); Button button = getView().findViewById(R.id.button2); /*Bundle args = getArguments(); String userName = args. getString("user_name");*/ //Log.d("ning","userName:" + userName); HomeFragmentArgs args = HomeFragmentArgs. fromBundle(getArguments()); String userName = args. getUserName(); int age = args. getAge(); Log.d("ning",userName + "," + age); button.setOnClickListener((v)->{<!-- --> NavController navController = Navigation. findNavController(v); navController.navigate(R.id.action_detailFragment_to_homeFragment); }); } }
<?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"> <fragment android:id="@ + id/fragment" android:name="androidx.navigation.fragment.NavHostFragment" android:layout_width="match_parent" android:layout_height="match_parent" app:defaultNavHost="true" app:navGraph="@navigation/my_nav_graph" /> </androidx.constraintlayout.widget.ConstraintLayout>
<?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=".DetailFragment"> <Button android:id="@ + id/button2" 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" /> </androidx.constraintlayout.widget.ConstraintLayout>
<?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=".HomeFragment"> <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" /> </androidx.constraintlayout.widget.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?> <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/my_nav_graph" app:startDestination="@id/homeFragment"> <fragment android:id="@ + id/homeFragment" android:name="com.example.mynavigationdemo.HomeFragment" android:label="fragment_home" tools:layout="@layout/fragment_home" > <action android:id="@ + id/action_homeFragment_to_detailFragment" app:destination="@id/detailFragment" app:enterAnim="@anim/nav_default_enter_anim" app:exitAnim="@anim/nav_default_exit_anim" /> <argument android:name="user_name" app:argType="string" android:defaultValue="unknown"/> <argument android:name="age" app:argType="integer" android:defaultValue="0"/> </fragment> <fragment android:id="@ + id/detailFragment" android:name="com.example.mynavigationdemo.DetailFragment" android:label="fragment_detail" tools:layout="@layout/fragment_detail" > <action android:id="@ + id/action_detailFragment_to_homeFragment" app:destination="@id/homeFragment" /> </fragment> </navigation>
Some notes on adding dependencies are as follows: