栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

每天记录学习的新知识 :navigation

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

每天记录学习的新知识 :navigation

navigation
  • navigation 有什么用途?
  • navigation 的使用方法
    • Activity 多个Fragment的情况
    • Fragment 嵌套 Fragment

navigation 有什么用途?

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.效果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/684938.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号