- navigation 有什么用途?
- navigation 的使用方法
- Activity 多个Fragment的情况
- Fragment 嵌套 Fragment
Navigation 直接翻译即为导航,它是 Android Jetpack 组件之一,是管理fragment跳转的框架,如果应用只有一个Activity,那么这个框架将是首选。
navigation 在车机应用上,用的比较多。
navigation 的使用方法循序渐进中,慢慢更新用法
Activity 多个Fragment的情况1.引入依赖
implementation 'androidx.navigation:navigation-fragment:2.3.5'
implementation 'androidx.navigation:navigation-ui:2.3.5'
2.写几个我们需要放在首页的碎片
baseFragment
public abstract class baseFragment extends Fragment {
public String TAG = this.getClass().getSimpleName();
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(bindLayout(), container, false);
}
protected abstract int bindLayout();
}
首页
public class MainFragment extends baseFragment {
@Override
protected int bindLayout() {
return R.layout.fragment_main;
}
}
==
页面只要继承 Fragment 即可,无过多要求。
3.搞个navigation的基础的配置文件
res 下新建navigation路径,新建文件nav_register.xml
4.Activity的资源文件
5.MainActivity内的代码
public class MainActivity extends baseActivity {
private NavHostFragment navHostFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_register_frag);
RadioGroup radioGroup = findViewById(R.id.radio_group);
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
LogUtil.i(TAG, "onCheckedChanged ==" + checkedId);
switch (checkedId) {
case R.id.btn_page_1:
navHostFragment.getNavController().navigate(R.id.mainFragment);
break;
case R.id.btn_page_2:
navHostFragment.getNavController().navigate(R.id.secondFragment);
break;
case R.id.btn_page_3:
navHostFragment.getNavController().navigate(R.id.meFragment);
break;
default:
break;
}
}
});
}
}
Fragment 嵌套 Fragment
续上面代码写的,我们要在MainFragment中再添加两个Fragment
1.新建 Fragment
和上面一样,没有什么出奇的
public class AllScanFragment extends baseFragment {
@Override
protected int bindLayout() {
return R.layout.fragment_all_scan;
}
}
2.创建第二份 navigation文件,这份文件要用在mainFragment的layout文件中
nav_register_frag_main
3.MainFragment的layout文件
4.MainFragment中的代码
public class MainFragment extends baseFragment {
@Override
protected int bindLayout() {
return R.layout.fragment_main;
}
private NavHostFragment navHostFragment;
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
navHostFragment = (NavHostFragment) getChildFragmentManager().findFragmentById(R.id.nav_register_frag_main);
RadioGroup radioGroup = view.findViewById(R.id.radio_group);
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
LogUtil.i(TAG, "onCheckedChanged ==" + checkedId);
switch (checkedId) {
case R.id.btn_page_1:
navHostFragment.getNavController().navigate(R.id.allScanFragment);
break;
case R.id.btn_page_2:
navHostFragment.getNavController().navigate(R.id.paramScanFragment);
break;
default:
break;
}
}
});
}
}
5.效果



