让你在开发中爱不释手的 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 代码:
-
<?xml version="1.0" encoding="utf-8"?>
-
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
-
xmlns:app=
"http://schemas.android.com/apk/res-auto"
-
xmlns:tools=
"http://schemas.android.com/tools"
-
android:layout_width=
"match_parent"
-
android:layout_height=
"match_parent"
-
tools:context=
".activity.MainActivity"
-
>
-
-
<TextView
-
android:id=
"@+id/textView"
-
android:layout_width=
"match_parent"
-
android:layout_height=
"match_parent"
-
android:gravity=
"center"
-
android:text=
"Fragment A"
-
android:background=
"#FFEB3B"
-
android:textSize=
"28sp"
-
android:textStyle=
"bold"
-
android:textColor=
"#000000"
-
app:layout_constraintBottom_toBottomOf=
"parent"
-
app:layout_constraintEnd_toEndOf=
"parent"
-
app:layout_constraintStart_toStartOf=
"parent"
-
app:layout_constraintTop_toTopOf=
"parent" />
-
-
</androidx.constraintlayout.widget.ConstraintLayout>
fragment_b.xml 与上相同 只需修改:
-
android:text="Fragment B"
-
android:background="#4CAF50"
fragment_c.xml 与上相同 只需修改:
-
android:text="Fragment C"
-
android:background="#03A9F4"
fragment_d.xml 与上相同 只需修改
-
android:text="Fragment D"
-
android:background="#FF00"
Fragment_A.class——Fragment_C.class——Fragment_C.class——Fragment_D.class代码:
注意:也可以 不继承 BaseFragments 继承 app.Fragment 下的 也可以。
Fragment_A.xml 代码:
-
//继承来之 GT 的 BaseFragments 类
-
public
class Fragment_A extends GT.GT_Fragment.BaseFragments{
-
-
@Override
-
protected int loadLayout() {
//重写 loadLayout 方法
-
return R.layout.fragment_a;
//返回解析的布局文件
-
}
-
-
@Override
-
protected void initView(@NonNull View view, @Nullable Bundle savedInstanceState) {
//重写 initView 方法
-
// 写 Fragment 业务需求代码
-
}
-
-
}
Fragment_B.xml 与上相同 只需修改:
-
@Override
-
protected int loadLayout() {
-
return R.layout.fragment_b;
-
}
Fragment_C.xml 与上相同 只需修改:
-
@Override
-
protected int loadLayout() {
-
return R.layout.fragment_c;
-
}
Fragment_D.xml 与上相同 只需修改
-
@Override
-
protected int loadLayout() {
-
return R.layout.fragment_d;
-
}
第二步:写 MainActivity 与 activity_main 代码:
activity_main.xml 代码:
-
<?xml version="1.0" encoding="utf-8"?>
-
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
-
xmlns:app=
"http://schemas.android.com/apk/res-auto"
-
xmlns:tools=
"http://schemas.android.com/tools"
-
android:layout_width=
"match_parent"
-
android:layout_height=
"match_parent"
-
tools:context=
".activity.MainActivity">
-
-
<FrameLayout
-
android:id=
"@+id/fLayout"
-
android:layout_width=
"match_parent"
-
android:layout_height=
"0dp"
-
app:layout_constraintTop_toTopOf=
"parent"
-
app:layout_constraintBottom_toTopOf=
"@+id/lLayout"
-
/>
-
-
<LinearLayout
-
android:id=
"@+id/lLayout"
-
android:layout_width=
"match_parent"
-
android:layout_height=
"wrap_content"
-
app:layout_constraintBottom_toBottomOf=
"parent"
-
android:orientation=
"horizontal"
-
android:padding=
"5dp"
-
android:background=
"#FFFFFF"
-
>
-
-
<Button
-
android:id=
"@+id/btn1"
-
android:layout_width=
"0dp"
-
android:layout_height=
"wrap_content"
-
android:layout_weight=
"1"
-
android:text=
"按钮1"
-
android:onClick=
"onClick"
-
/>
-
-
<Button
-
android:id=
"@+id/btn2"
-
android:layout_width=
"0dp"
-
android:layout_height=
"wrap_content"
-
android:layout_weight=
"1"
-
android:text=
"按钮2"
-
android:onClick=
"onClick"
-
/>
-
-
<Button
-
android:id=
"@+id/btn3"
-
android:layout_width=
"0dp"
-
android:layout_height=
"wrap_content"
-
android:layout_weight=
"1"
-
android:text=
"按钮3"
-
android:onClick=
"onClick"
-
/>
-
-
<Button
-
android:id=
"@+id/btn4"
-
android:layout_width=
"0dp"
-
android:layout_height=
"wrap_content"
-
android:layout_weight=
"1"
-
android:text=
"按钮4"
-
android:onClick=
"onClick"
-
/>
-
-
</LinearLayout>
-
-
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.class 代码:
-
public
class MainActivity extends AppCompatActivity implements View.OnClickListener{
-
-
private GT.GT_Fragment gt_f;
//定义 Fragment 管理器
-
-
@Override
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.activity_main);
-
-
//添加要管理的 Fragment
-
List<Fragment> list =
new ArrayList<>();
-
list.add(
new Fragment_A());
-
list.add(
new Fragment_B());
-
list.add(
new Fragment_C());
-
list.add(
new Fragment_D());
-
-
//初始化 Fragment 管理器
-
gt_f = GT.GT_Fragment.getGT_fragment()
-
// 初始化 GT_Fragment 管理器参数
-
.initFragment(savedInstanceState,
this,getSupportFragmentManager())
-
// 参数1:帧布局的 id 参数2:存储 Fragment 的 list 参数3:默认加载首页的页面 一般设置为 0 就如 list.get(0);
-
.loadFragment(R.id.fLayout,list,
0);
-
-
}
-
-
public void onClick(View view) {
-
switch (view.getId()){
-
case R.id.btn1:
-
gt_f.startFragment(Fragment_A.class);
//跳转到 Fragment_A
-
break;
-
case R.id.btn2:
-
gt_f.startFragment(Fragment_B.class);
//跳转到 Fragment_B
-
break;
-
case R.id.btn3:
-
gt_f.startFragment(Fragment_C.class);
//跳转到 Fragment_C
-
break;
-
case R.id.btn4:
-
gt_f.startFragment(Fragment_D.class);
//跳转到 Fragment_D
-
break;
-
}
-
}
-
}
看看效果图:
《少量 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 嵌套的状态下 监听 物理返回按钮或其它按键的优化:
-
//监听 物理返回按键
-
getGT_Fragment().onKeyDown(view,
new View.OnKeyListener() {
-
@Override
-
public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
-
if (keyCode ==
4 && keyEvent.getAction() == KeyEvent.ACTION_DOWN) {
-
-
// 这里的 activity 可以直接 写 不用去写 获取 activity 的代码
-
Toast.makeText(activity,
"监听到你按下 物理返回 按钮", Toast.LENGTH_SHORT).show();
-
// finish();//关闭当前 Fragment
-
-
return
true;
//只将 返回按键进行监听
-
}
-
return
false;
//其余的如 音量小 音量大等等,不进行监听,都交给 Activity 管理。
-
}
-
});
总结:美帝 框架,让切换变得如此简单!
转载:https://blog.csdn.net/qq_39799899/article/details/105929038