飞道的博客

Android——GT使用教程(二十四) GT_Fragment 使用篇 教程

305人阅读  评论(0)

让你在开发中爱不释手的 GT 包。关注GSLS官网,查看更多源码 ヾ(✿゚▽゚)ノ工具包。

所有文章 小编尽量让读者可以 直接 读懂 完全 复制粘贴,其中复杂或较多 的源码 会有 源码 并 贴上 github 网址

GT 类 里面的源码完全开源较多的中文注释,让更多的人直接读懂。

点个关注点个赞呗(〃'▽'〃),关注博主最新发布库: https://github.com/1079374315/GSLS_Tool

美帝 框架,让创造变得如此简单!

 

新建 activity 与 fragment 文件夹,目录简单:一个 Activity 、四个 Fragment 再加 对应的布局文件。

第一步:新建 四个 Fragment 与 对应的 xml 布局文件

fragment_a.xml——fragment_b.xml——fragment_c.xml——fragment_d.xml 代码:


  
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app= "http://schemas.android.com/apk/res-auto"
  4. xmlns:tools= "http://schemas.android.com/tools"
  5. android:layout_width= "match_parent"
  6. android:layout_height= "match_parent"
  7. tools:context= ".activity.MainActivity"
  8. >
  9. <TextView
  10. android:id= "@+id/textView"
  11. android:layout_width= "match_parent"
  12. android:layout_height= "match_parent"
  13. android:gravity= "center"
  14. android:text= "Fragment A"
  15. android:background= "#FFEB3B"
  16. android:textSize= "28sp"
  17. android:textStyle= "bold"
  18. android:textColor= "#000000"
  19. app:layout_constraintBottom_toBottomOf= "parent"
  20. app:layout_constraintEnd_toEndOf= "parent"
  21. app:layout_constraintStart_toStartOf= "parent"
  22. app:layout_constraintTop_toTopOf= "parent" />
  23. </androidx.constraintlayout.widget.ConstraintLayout>

fragment_b.xml 与上相同 只需修改:


  
  1. android:text="Fragment B"
  2. android:background="#4CAF50"

fragment_c.xml 与上相同 只需修改:


  
  1. android:text="Fragment C"
  2. android:background="#03A9F4"

fragment_d.xml 与上相同 只需修改


  
  1. android:text="Fragment D"
  2. android:background="#FF00"

 

Fragment_A.class——Fragment_C.class——Fragment_C.class——Fragment_D.class代码:

注意:也可以 不继承  BaseFragments  继承  app.Fragment  下的 也可以。

Fragment_A.xml 代码:


  
  1. //继承来之 GT 的 BaseFragments 类
  2. public class Fragment_A extends GT.GT_Fragment.BaseFragments{
  3. @Override
  4. protected int loadLayout() { //重写 loadLayout 方法
  5. return R.layout.fragment_a; //返回解析的布局文件
  6. }
  7. @Override
  8. protected void initView(@NonNull View view, @Nullable Bundle savedInstanceState) { //重写 initView 方法
  9. // 写 Fragment 业务需求代码
  10. }
  11. }

Fragment_B.xml 与上相同 只需修改:


  
  1. @Override
  2. protected int loadLayout() {
  3. return R.layout.fragment_b;
  4. }

Fragment_C.xml 与上相同 只需修改:


  
  1. @Override
  2. protected int loadLayout() {
  3. return R.layout.fragment_c;
  4. }

Fragment_D.xml 与上相同 只需修改


  
  1. @Override
  2. protected int loadLayout() {
  3. return R.layout.fragment_d;
  4. }

 

第二步:写 MainActivity  与 activity_main  代码:

activity_main.xml 代码:


  
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app= "http://schemas.android.com/apk/res-auto"
  4. xmlns:tools= "http://schemas.android.com/tools"
  5. android:layout_width= "match_parent"
  6. android:layout_height= "match_parent"
  7. tools:context= ".activity.MainActivity">
  8. <FrameLayout
  9. android:id= "@+id/fLayout"
  10. android:layout_width= "match_parent"
  11. android:layout_height= "0dp"
  12. app:layout_constraintTop_toTopOf= "parent"
  13. app:layout_constraintBottom_toTopOf= "@+id/lLayout"
  14. />
  15. <LinearLayout
  16. android:id= "@+id/lLayout"
  17. android:layout_width= "match_parent"
  18. android:layout_height= "wrap_content"
  19. app:layout_constraintBottom_toBottomOf= "parent"
  20. android:orientation= "horizontal"
  21. android:padding= "5dp"
  22. android:background= "#FFFFFF"
  23. >
  24. <Button
  25. android:id= "@+id/btn1"
  26. android:layout_width= "0dp"
  27. android:layout_height= "wrap_content"
  28. android:layout_weight= "1"
  29. android:text= "按钮1"
  30. android:onClick= "onClick"
  31. />
  32. <Button
  33. android:id= "@+id/btn2"
  34. android:layout_width= "0dp"
  35. android:layout_height= "wrap_content"
  36. android:layout_weight= "1"
  37. android:text= "按钮2"
  38. android:onClick= "onClick"
  39. />
  40. <Button
  41. android:id= "@+id/btn3"
  42. android:layout_width= "0dp"
  43. android:layout_height= "wrap_content"
  44. android:layout_weight= "1"
  45. android:text= "按钮3"
  46. android:onClick= "onClick"
  47. />
  48. <Button
  49. android:id= "@+id/btn4"
  50. android:layout_width= "0dp"
  51. android:layout_height= "wrap_content"
  52. android:layout_weight= "1"
  53. android:text= "按钮4"
  54. android:onClick= "onClick"
  55. />
  56. </LinearLayout>
  57. </androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.class 代码:


  
  1. public class MainActivity extends AppCompatActivity implements View.OnClickListener{
  2. private GT.GT_Fragment gt_f; //定义 Fragment 管理器
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. //添加要管理的 Fragment
  8. List<Fragment> list = new ArrayList<>();
  9. list.add( new Fragment_A());
  10. list.add( new Fragment_B());
  11. list.add( new Fragment_C());
  12. list.add( new Fragment_D());
  13. //初始化 Fragment 管理器
  14. gt_f = GT.GT_Fragment.getGT_fragment()
  15. // 初始化 GT_Fragment 管理器参数
  16. .initFragment(savedInstanceState, this,getSupportFragmentManager())
  17. // 参数1:帧布局的 id 参数2:存储 Fragment 的 list 参数3:默认加载首页的页面 一般设置为 0 就如 list.get(0);
  18. .loadFragment(R.id.fLayout,list, 0);
  19. }
  20. public void onClick(View view) {
  21. switch (view.getId()){
  22. case R.id.btn1:
  23. gt_f.startFragment(Fragment_A.class); //跳转到 Fragment_A
  24. break;
  25. case R.id.btn2:
  26. gt_f.startFragment(Fragment_B.class); //跳转到 Fragment_B
  27. break;
  28. case R.id.btn3:
  29. gt_f.startFragment(Fragment_C.class); //跳转到 Fragment_C
  30. break;
  31. case R.id.btn4:
  32. gt_f.startFragment(Fragment_D.class); //跳转到 Fragment_D
  33. break;
  34. }
  35. }
  36. }

看看效果图:

              

《少量 Activity 对应 多个 Fragemnt》                     《单 Activity 对应 多个 Fragemnt》

本章节 dome 网址:https://github.com/1079374315/GT_Fragment.git

GT_Fragment 使用之 进阶版(单 Activity 与对应 多 Fragment 开发):https://github.com/1079374315/GT_Activity_Fragments.git

在 单 Activity 与对应 多 Fragment 开发 其中 的 打开新的页面 与  销毁当前页面 代码作了优化:

startFragment(Fragment_n.newInstance());//打开一个新的 Fragment
finish();//关闭当前 Fragment

包括 解决 多层 Fragment 嵌套的状态下 监听 物理返回按钮或其它按键的优化:


  
  1. //监听 物理返回按键
  2. getGT_Fragment().onKeyDown(view, new View.OnKeyListener() {
  3. @Override
  4. public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
  5. if (keyCode == 4 && keyEvent.getAction() == KeyEvent.ACTION_DOWN) {
  6. // 这里的 activity 可以直接 写 不用去写 获取 activity 的代码
  7. Toast.makeText(activity, "监听到你按下 物理返回 按钮", Toast.LENGTH_SHORT).show();
  8. // finish();//关闭当前 Fragment
  9. return true; //只将 返回按键进行监听
  10. }
  11. return false; //其余的如 音量小 音量大等等,不进行监听,都交给 Activity 管理。
  12. }
  13. });

 

总结:美帝 框架,让切换变得如此简单!

 


转载:https://blog.csdn.net/qq_39799899/article/details/105929038
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场