【Android开发--新手必看篇】依赖框架Fragmentation的使用

Android笔记

​ ——Fragmentation
若对该知识点有更多想了解的,欢迎私信博主~~

依赖框架:Fragmentation
一:优势及作用
  1. 封装了很多好用的方法
  2. 解决了一些官方Fragment库中存在的一些Bug
二:Fragmentation的配置
  1. dependencies中添加(注入依赖)

    implementation 'me.yokeyword:fragmentation:1.3.6'
    implementation 'me.yokeyword:fragmentation-swipeback:1.3.6'
    
三:使用
  1. 可创建悬浮球在开发得时候查看栈

    1. 创建Application

      public class App extends Application {
          @Override
          public void onCreate() {
              super.onCreate();
              // 设置 栈视图 模式为 (默认)悬浮球模式   
              //	SHAKE: 摇一摇唤出  NONE:隐藏, 仅在Debug环境生效
              Fragmentation.builder()
                      .stackViewMode(Fragmentation.BUBBLE)
                      .debug(BuildConfig.DEBUG).install();
          }
      }
      
    2. 在AndroidManifest添加全局配置

      android:name=".App"
      
  2. 基本配置

    1. Activity 必须继承SupportActivity

      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          initView();//绑定控件
      
          //首次加载,如果当前Activity没有Fragment1,则创建一个
          if (findFragment(Fragment1.class) == null) {
              loadRootFragment(R.id.fl, Fragment1.newInstance());
              //设置全局的Fragment切换样式
             		//DefaultNoAnimator 无切换样式
              	//DefaultHorizontalAnimator 横向切换
              	//DefaultVerticalAnimator 总想切换
              setFragmentAnimator(new DefaultHorizontalAnimator());
          }
      }
      
    2. Fragment 必须继承SupportFragment

      public class Fragment1 extends SupportFragment {
      
          public static Fragment1 newInstance() {
              return new Fragment1();
          }
      
          @Nullable
          @Override
          public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
              return inflater.inflate(R.layout.fm1, null);
          }
      }
      
    3. 需要传参的Fragment

      public class Fragment2 extends SupportFragment {
      	//关键代码
          public static Fragment2 newInstance(Bundle args) {
              Fragment2 fragment = new Fragment2();
              fragment.setArguments(args);
              return fragment;
          }
      
          @Nullable
          @Override
          public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
              return inflater.inflate(R.layout.fm2, null);
          }
          
          @Override
          public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
              super.onViewCreated(view, savedInstanceState);
      
              Log.e("aaa","message:"+getArguments().getString("message", "No word"))//操作传值
          }
      }
      
  3. 关于Activity启动Fragment

    1. 启动

      loadRootFragment(R.id.fl, Fragment1.newInstance());
      
    2. 启动+传值

      Bundle bundle = new Bundle();
      bundle.putString("message", "Hello World");
      loadRootFragment(R.id.fl, Fragment2.newInstance(bundle));
      
    3. Fragment已启动但要传参

      //Fragment2中添加
      @Override
      public void onNewBundle(Bundle args) {
          super.onNewBundle(args);
          Log.e("aaa","message:"+getArguments().getString("message", "No word"))//操作传值
      }
      //Activity传值
      Fragment2 fragment=findFragment(Fragment2.class);
      fragment.onNewBundle(bundle);
      
  4. 关于Fragment启动Fragment

    1. 从A到B

      //Fragment2
      start(Fragment1.newInstance());//参数2,设置启动Fragment模式,同Activity的四种启动模式,默认SINGLETASK
      
    2. 从A到B,关掉A

      startWithPop(Fragment1.newInstance());
      
    3. 从A到B,并给B传值

      Bundle bundle = new Bundle();
      bundle.putString("message", "Hello World");
      start(Fragment2.newInstance(bundle));
      
    4. 从A到B,B返回值给A

      //Fragment1启动Fragment2
      Bundle bundle = new Bundle();
      bundle.putString("message", "Hello World");
      startForResult(Fragment2.newInstance(bundle),1);
      
      //Fragment1写接收方法
      @Override
      public void onFragmentResult(int requestCode, int resultCode, Bundle data) {
          super.onFragmentResult(requestCode, resultCode, data);
          if (requestCode==1 && resultCode==RESULT_OK && data!=null){
              Log.e("aaa","data:"+data.getString("msg"));
          }
      }
      
      //Fragment2写传值方法
      Bundle bundle=new Bundle();
      bundle.putString("msg","Hello fm1");
      setFragmentResult(RESULT_OK,bundle);//当点击手机的返回键,就会触发Fragment1的onFragmentResult
      
  5. 返回键

    //Activity中
    @Override
    public void onBackPressedSupport() {
        int count = getSupportFragmentManager().getBackStackEntryCount();
        if (count == 0){
            super.onBackPressedSupport();//默认返回键规则
        }else {
            getSupportFragmentManager().popBackStack();//将栈顶Fragment移除
        }
    }
    
参考资料:
  1. https://blog.csdn.net/qugengting/article/details/93589288
  2. https://github.com/YoKeyword/Fragmentation
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值