Android笔记
——Fragmentation
【若对该知识点有更多想了解的,欢迎私信博主~~】
依赖框架:Fragmentation
一:优势及作用
- 封装了很多好用的方法
- 解决了一些官方Fragment库中存在的一些Bug
二:Fragmentation的配置
-
dependencies中添加(注入依赖)
implementation 'me.yokeyword:fragmentation:1.3.6' implementation 'me.yokeyword:fragmentation-swipeback:1.3.6'
三:使用
-
可创建悬浮球在开发得时候查看栈
-
创建Application
public class App extends Application { @Override public void onCreate() { super.onCreate(); // 设置 栈视图 模式为 (默认)悬浮球模式 // SHAKE: 摇一摇唤出 NONE:隐藏, 仅在Debug环境生效 Fragmentation.builder() .stackViewMode(Fragmentation.BUBBLE) .debug(BuildConfig.DEBUG).install(); } }
-
在AndroidManifest添加全局配置
android:name=".App"
-
-
基本配置
-
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()); } }
-
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); } }
-
需要传参的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"))//操作传值 } }
-
-
关于Activity启动Fragment
-
启动
loadRootFragment(R.id.fl, Fragment1.newInstance());
-
启动+传值
Bundle bundle = new Bundle(); bundle.putString("message", "Hello World"); loadRootFragment(R.id.fl, Fragment2.newInstance(bundle));
-
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);
-
-
关于Fragment启动Fragment
-
从A到B
//Fragment2 start(Fragment1.newInstance());//参数2,设置启动Fragment模式,同Activity的四种启动模式,默认SINGLETASK
-
从A到B,关掉A
startWithPop(Fragment1.newInstance());
-
从A到B,并给B传值
Bundle bundle = new Bundle(); bundle.putString("message", "Hello World"); start(Fragment2.newInstance(bundle));
-
从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
-
-
返回键
//Activity中 @Override public void onBackPressedSupport() { int count = getSupportFragmentManager().getBackStackEntryCount(); if (count == 0){ super.onBackPressedSupport();//默认返回键规则 }else { getSupportFragmentManager().popBackStack();//将栈顶Fragment移除 } }
参考资料:
- https://blog.csdn.net/qugengting/article/details/93589288
- https://github.com/YoKeyword/Fragmentation