Fragment

作者: 魔女小姐的猫 | 来源:发表于2020-03-26 12:43 被阅读0次
    1. 静态添加fragment
      ①创建一个fragment
      ②创建布局,把①中的fragment放到布局中
      注意:
      ①必须要有id,否则:Caused by: java.lang.IllegalArgumentException: Binary XML file line #9: Must specify unique android:id, android:tag, or have a parent with an id for com.anfly.fragmentr.AFragment
      ②布局中必须添加属性name,值该fragment全类名

    2. 动态的使用Fragment

      //1.获得碎片管理器
            FragmentManager manager = getFragmentManager();
            //2.开始事务
            FragmentTransaction tr = manager.beginTransaction();
            //3.构建Fragment对象
            SoundFragment fragment = new SoundFragment();
            //4.替换容器中内容 参数1 右边容器的id,参数2 fragment对象
            tr.replace(R.id.container, fragment);
            //5.提交事务
            tr.commit();
    
    1. Fragment生命周期
      ①onAttach() : 当Fragment与Activity发生关联时调用。
      ②onCreate()
      ③onCreateView() :创建该Fragment的视图
      ④onActivityCreated() : 当Activity的onCreate方法返回时调用
      ⑤onStart()
      ⑥onResume()
      ⑦onPause()
      ⑧onStop()
      ⑨onDestroyView() : 与onCreateView想对应,当该Fragment的 视图被移除时调用
      ⑩onDestroy()
      ⑪onDetach() :与onAttach相对应,当Fragment与Activity关联被取消时调用

    2. Fragment常用方法
      ① add() :添加
      ② remove() : 移除 (从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈(回退栈后面会详细说),这个Fragment实例将会被销毁。)
      ③ replace() : 替换
      ④ hide(): 隐藏
      ⑤ show() : 显示
      ⑥ detach() : 会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护。
      ⑦ attach() : 重建view视图,附加到UI上并显示。
      ⑧ commit() : 提交一个事务

    3. 回退栈的管理(暂时不掌握):
      ①. 调用transaction.addToBackStack(null);可将Fragment加入回退栈,按返回时可返回到上一个Fragment

     FragmentManager manager = getActivity().getSupportFragmentManager();
            FragmentTransaction transaction = manager.beginTransaction();
            transaction.add(R.id.container,new Fragment2(),"fragment2");
            transaction.hide(this);
            //将Fragment加入回退栈
            transaction.addToBackStack(null);
            transaction.commit();
    

    ②. 若使用的是FragmentManagermanager=getFragmentManager(),Activity继承的是AppCompatActivity,在某些版本api下按返回键直接退出了Activity,需要手动添加回退逻辑,重写onBackPressed():

      @Override
        public void onBackPressed() {
            FragmentManager manager = getFragmentManager();
            int backStackEntryCount = manager.getBackStackEntryCount();
            if (backStackEntryCount>0){
                manager.popBackStack();
            }else {
                finish();
            }
        }
    

    6.Activity传递数据给Fragment
    ①. 在Activity中创建Bundle数据包,并调用Fragment对象的setArguments(Bundle bundle)方法

    Activity中:

            mFragmentA = new FragmentA();
            Bundle bundle = new Bundle();
            bundle.putString("data","来自MainActivity的问候");
            mFragmentA.setArguments(bundle);
    

    Fragment中:

            Bundle bundle = getArguments();
            String a = bundle.getString("a");
    
    1. fragment 与 fragment 之间的传递数据
      ①通过构造方式传值(不推荐)
      ②通过FragmentManager找到对应Id或者Tag的Framgment,然后获取里面的数据或方法
      ③通过它们所在的Activity作为桥梁,可以使用getActivity()或者接口回调,达到获取另一个Fragment数据的目的.

    2. RadioGroup底部导航集合Fragmentr切换

    fm = getSupportFragmentManager();
            FragmentTransaction transaction = fm.beginTransaction();
            homeFragment = new HomeFragment();
            collectFragment = new CollectFragment();
            transaction.add(R.id.tableLayout, homeFragment).hide(collectFragment).commit();
    
            radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(RadioGroup group, int checkedId) {
                    switch (checkedId) {
                        case R.id.radioButton:
                            fm.beginTransaction().hide(collectFragment).show(homeFragment).commit();
                            break;
                        case R.id.radioButton2:
                            fm.beginTransaction().hide(homeFragment).show(collectFragment).commit();
                            break;
                    }
                }
            });
    

    相关文章

      网友评论

          本文标题:Fragment

          本文链接:https://www.haomeiwen.com/subject/cfgquhtx.html