5.1 Fragment是什么
迷你型的Activity。
5.2 Fragment的使用方式
5.2.1 Fragment的简单用法
第一步:创建一个左,右Fragment。
第二步:在主Activity的layout的布局中,添加Fragment,代码如下。
<fragment
android:id="@+id/leftFrag"
android:name="com.example.fragment_test.left_Fragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"/>
<fragment
android:id="@+id/rigthFrag"
android:name="com.example.fragment_test.right_Fragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"/>
5.2.2 动态添加Fragment
第一步:创建一个新的another_right_fragment。
第二步:修改主Activity的布局代码如下。
<fragment
android:id="@+id/leftFrag"
android:name="com.example.fragment_test.left_Fragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"/>
<FrameLayout
android:id="@+id/rigthFrameLayout"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"/>
第三步:修改主Activity的代码如下。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button_left_1.setOnClickListener {
replaceFragment(another_right_Fragment())
}
replaceFragment(right_Fragment())
}
private fun replaceFragment(fragment: Fragment){
val fragmentManager = supportFragmentManager
val transaction = fragmentManager.beginTransaction()
transaction.replace(R.id.rigthFrameLayout, fragment)
transaction.commit()
}
效果:点击左边的按钮,动态添加Fragment。
5.2.3 在Fragment中实现返回栈
使用Back键,可以返回,添加如下代码。
transaction.replace(R.id.rigthFrameLayout, fragment)
transaction.addToBackStack(null) // null这个参数描述返回栈的状态
transaction.commit()
5.2.4 Fragment和Activity的交互
# 在一个Fragment中调用另一个Fragment的数据
第一步:Activity中添加如下代码:
val fragment = leftFrag as left_Fragment # leftFrag 是主Activity布局文件中的<fragment>名称,left_Fragment是fragment类名
第二步:在另一个fragment的类中,添加如下代码,获取如下另一个fragment的数据。
requireActivity().leftFrag.button_left_1.text.toString()
# requireActivity()函数源码 (源码就是java,不是kotlin,难道为了省事?)
public final FragmentActivity requireActivity() {
FragmentActivity activity = getActivity();
if (activity == null) {
throw new IllegalStateException("Fragment " + this + " not attached to an activity.");
}
return activity;
}
5.3 生命周期
5.3.1 Fragment的状态和回调
# 状态
1, 运行状态
2, 暂停状态
3, 停止状态
与Activity不同的是,FragmentTransaction的romove(),replace方法将Fragment从Activity中移除,
如果调用了addToBackStack()方法,Fragment会进入停止状态。
4, 销毁状态
# 回调方法
onAttach():关联Activity,调用
onCreateView():创建视图调用
onActivityCreated():确保关联的Activity创建完毕时调用。
onDestoryView():当onCreateView()创建的视图被移除调用。
onDetach():当onAttach()关联的Activity解除关联调用。
5.3.2 体验Fragment的生命周期
https://blog.csdn.net/pkorochi/article/details/102478538?ops_request_misc=&request_id=&biz_id=102&utm_term=%E4%BD%93%E9%AA%8CFragment%E7%9A%84%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-102478538.142^v58^pc_search_tree,201^v3^control_2&spm=1018.2226.3001.4187
5.4 动态加载布局的技巧
5.4.1 使用限定符
例如新建一个供大屏幕使用的layout布局:
(project项目视图下)右击res,点击 new --> android resource directory,
然后,选择你的 Resource type, 以及需要限定的类型,如,屏幕大小,横向,竖向等等,表示在这个情况下使用。
5.4.2 使用最小限定符
Available qualifilers(激活限定符): 选择Smallest Screen Width(基于最小宽度限定符)。
5.5 Fragment的最佳实践:一个简易版的新闻应用
具体看www.ituring.com.cn/book/2744网站,下载好,在第5章的项目。
个人见解:利用sw600dp,分开,手机和平板Layout,手机,使用二个Activity,
平板使用一个Acitivity,二个Fragmnet, 在新闻标题的列表中的点击事件中,进行区分,是刷新Fragment(平板),还是启动Activity(手机)。
第5章:手机平板要兼顾,探究Fragment(笔记)
最新推荐文章于 2024-04-27 11:23:57 发布