jetpack----Navigation组件(导航) 让页面切换无比简单 01
NavHost 容器,承载页面的。既是容器也是控制器。
Fragment 碎片,依存于activity。NavHost相当于把Fragment弹出去压进来(栈)
NavController 控制把哪个页面弄进来,把哪个页面弄出去
NavGraph 想控制把哪个页面弄进来,把哪个页面弄出去就得使用NavGraph控制路线

创建两个fragment
创建NavGraph资源文件 以控制各个fragment

创建完之后点击按钮,自动导入依赖。点击加号,把我们的两个fragment导入进来

 
然后就可以连线了,也就是设置二者的跳转

现在我们还需要NavHost(activity)去承载这两个fragment
 
现在我们暂且把MainActivity设置为我们的NavHost
 
选中要加载进来的NavGraph,点击确定
 
好的,现在我们就能跑起来了,但是点击按钮没反应,现在我们给按钮加上动作。这里我只贴了一个Fragment代码
package com.example.navigationdemo; import android.os.Bundle; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.navigation.NavController; import androidx.navigation.Navigation; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; public class HomeFragment extends Fragment { public HomeFragment() { // Required empty public constructor } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @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; button = getView().findViewById(R.id.button); //给按钮增加动作 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //找到我们当前的页面 NavController controller = Navigation.findNavController(view); //控制跳转到细节页 controller.navigate(R.id.action_homeFragment2_to_detailFragment3); } }); } }
现在我们没有返回按钮,就是标准的左上角有个箭头的那个返回
因为这个箭头是activity里的嘛,所以去activity里面写
package com.example.navigationdemo; import androidx.appcompat.app.AppCompatActivity; import androidx.navigation.NavController; import androidx.navigation.Navigation; import androidx.navigation.fragment.NavHostFragment; import androidx.navigation.ui.NavigationUI; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //给detailFragment加上返回按钮,但是还是没有动作 这个Fragment是activity_main里的navigationView的id NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.fragmentContainerView); NavController navController = navHostFragment.getNavController(); NavigationUI.setupActionBarWithNavController(this,navController); } //返回按钮的动作 @Override public boolean onSupportNavigateUp() { NavController controller = Navigation.findNavController(this,R.id.fragmentContainerView); return controller.navigateUp(); } }
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号