Android(Fragment)
Fragment是什么
Fragment是一种可以嵌入在Activity当中的UI片段。你可以将Fragment理解成一个迷你型的Activity,虽然这个迷你型的Activity有可能和普通的Activity是一样大的。
解决某些问题:一个页面只能展示一个activity,如果要展示另一个的话,需要入栈和出栈。但是一个activity中可以包含很多个fragment。实现了多页面共存。
简单使用
首先为我们的
fragment
创建两个布局文件
如下:1
2
3
4
5
6
7
8
9
10
11
12
13
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Button"/>
</LinearLayout>定义一个fragment类
1
2
3
4
5
6class RightFragment():Fragment(){
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.right_fragment,container,false)
}
}并重写他的onCreateView方法
与actiivity类似,也很像自定义控件的创建方式。
然后在布局中引入fragment
1
2
3
4
5
6<fragment
android:id="@+id/leftFrag"
android:name="top.zfxt.fragmenttest.LeftFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"/>需要注意,他这里使用
name
属性来引入对应的fragment
而在自定义控件中,直接写完整的包名来引入。完成简单使用
动态引入fragment
修改activity中的方法,代码如下
1 | override fun onCreate(savedInstanceState: Bundle?) { |
其大致为:
(1) 创建待添加Fragment的实例。
(2) 获取FragmentManager,在Activity中可以直接调用getSupportFragmentManager()
方法获取。
(3) 开启一个事务,通过调用beginTransaction()方法开启。
(4) 向容器内添加或替换Fragment,一般使用replace()方法实现,需要传入容器的id和待添
加的Fragment实例。
(5) 提交事务,调用commit()方法来完成。
fragment添加到返回栈
只需要在事务执行时,添加一行transaction.addToBackStack(null)
一般默认为null,这样子,fragment也在返回栈中,点击back后,会退回一个返回栈内容。
fragment和activity交互
activity获取fragment的实例:
Fragment提供了一个supportFragmentManager
,activity通过这个管理器,然后调用findViewById,可以获取到Fragment的具体view然后操作。
fragment获取activity实例:
它内置了一个getActivity()方法,可以获取。
fragment和fragment交互:通过activity中转
Fragment声明周期
他的声明周期与activity很像。当activity处于暂停时,与之关联的fragment也会暂停。fragment除了有和activity几乎一样的回调方法外,还有一些附加的回调方法
方法 | 解释 |
---|---|
onAttach() | 当Fragment和Activity建立关联时调用。 |
onCreateView() | 为Fragment创建视图(加载布局)时调用。 |
onActivityCreated() | 确保与Fragment相关联的Activity已经创建完毕时调用。 |
onDestroyView() | 当与Fragment关联的视图被移除时调用。 |
onDetach() | 当Fragment和Activity解除关联时调用。 |
动态加载布局
让系统根据屏幕尺寸自动适配使用什么布局,主要是下面这张表
然后通过在res下建立对应的目录:如layout-small
,drawable-xxhdpi
之类的。
如果需要设置更具体的大小限制。可以使用最小宽度限定符(smallest-widthqualifier)
使用过程例如:需要设置一个大于600dp而单独使用都布局,就建立一个layout-sw600dp
的目录。就是这么简单