一到四节演示一个简单例子,在 Activity 中添加两个 Fragment 来平分 Activity 左右空间。
一、新建左Fragment(left_fragment.xml)
<LinearLayout...>
<Button.../>
</LinearLayout>
二、新建右Fragment(right_fragment.xml)
<LinearLayout...>
<TextView.../>
</LinearLayout>
三、新建LeftFragment类
class LeftFragment: Fragment() {
override fun onCreateView(inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?) : View? {
return inflater.inflate(R.layout.left_fragment,container,false)
}
}
四、在activity_main.xml 中添加左右 Fragment
<LinearLayout android:orientation = "horizontal" ...>
<fragment
android:name = "com.example.fragmenttest.LeftFragment"
android:layout_width = "0dp"
android:layout_height ="match_parent"
android:layout_weight = "1"
/>
<fragment
android:name = "com.example.fragmenttest.RightFragment"
android:layout_width = "0dp"
android:layout_height ="match_parent"
android:layout_weight = "1"
/>
</LinearLayout>
运行软件后可以看到两个Fragment平分左右页面
五、动态添加 Fragment
<!-- 将上节中右Fragment代码修改为如下所示 -->
<FragmentLayout
android:id = "@+id/rightLayout"
android:layout_width = "0dp"
android:layout_height ="match_parent"
android:layout_weight = "1"
/>
// Kotlin
// 这里将动态修改Fragment的代码封装成一个方法
// 形参fragment就是要动态切换的Fragment布局对象
private fun replaceFragment(fragment: Fragment){
val fragmentManager = supportFragmentManager
val transaction = fragmentManager.beginTransaction()
transaction.replace(R.id.rightLayout,fragment)
// 将fragment添加到返回栈,这样用户返回不会直接退出软件(非必须)
transaction.addToBackStack(null)
transaction.commit()
}
六、在 Fragment 与 Activity 中互相获取对方实例
// 在Activity中获取fragment实例
val fragment = supportFragmentManager.findFragmentById(R.id.leftFragment) as LeftFragment
// 在Fragment中获取Activity实例
if(activity != null) {
val mainActivity = activity as MainActivity
}
七、Fragment 生命周期
运行状态: 关联的 Activity 运行时,该 Fragment 也处于运行状态。
暂停状态: Activity 暂停/未占满屏幕/Activity 到栈顶,Fragment 也会处于暂停状态。
停止状态: Activity 停止/在调用 remove()、replace() 前已经入栈,Fragment 进入停止状态。
销毁状态: Activity 销毁/在调用 remove()、replace() 前未入栈,Fragment 销毁。
onAttach()
:当 Fragment 与 Activity 建立关联时。onCreateView()
:Fragment 创建视图/加载布局时调用。onActivityCreated()
:Fragment 关联的 Activity 创建完毕时调用。onDestroyView()
:与 Fragment 关联视图被移除时调用。onDeath()
:Fragment 与 Activity 解除关联时调用。