Fragment可以看作一种灵活的子Activity,其依附于Activity运行。一个Activity下可以依附多个Fragment,从而实现一个页面多个窗口,而同一个Fragment也能被多个Activity复用,因此Fragment是Android开发中相当重要的板块。
Fragment简单使用
基本架构
首先,在java代码里新建一个空白Fragment:
默认给的代码很多都是没用的,我们直接删掉,只保留创建函数:
package com.example.fragmentbase;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
public class BlankFragment1 extends Fragment {
private View root;
private TextView textview;
private Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (root == null){
root = inflater.inflate(R.layout.fragment_blank1, container, false);
}
textview = root.findViewById(R.id.textview);
button = root.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
textview.setText("Clicked Button");
}
});
return root;
}
}
代码的整体逻辑是,在创建函数中根据布局文件fragment_blank1
渲染出一个View放置在root中,之后获取到fragment中的textview和button,并声明一个点击响应函数,当按钮被点击时更改textview中的文本。
其中,渲染所需的布局文件需要我们自己编写,放在layout
文件夹,在这里我放置了用于演示的TextView控件和Button控件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".BlankFragment1">
<!-- TODO: Update blank fragment layout -->
<TextView
android:id="@+id/textview"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="@string/hello_blank_fragment" />
<Button
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="button"
android:id="@+id/button"/>
</LinearLayout>
之后,在activity_main.xml
中添加一个fragment,注意是小写,同时fragment作为组件比较特殊,必须要有一个id,否则会闪退。为了将这个fragment和我们编写的java代码绑定,我们需要给这个fragment设置name。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical">
<fragment android:name="com.example.fragmentbase.BlankFragment1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragment1"/>
</LinearLayout>
运行效果
初始界面:
点击按钮后:
在activity中加入多个fragment
代码很简单,复制一份BlankFragment1.java
成BlankFragment2.java
,然后在activity_main.xml
中加入fragment2的内容,再在模拟器中运行,就可以看到两个页面了,这两个页面是并行互不干扰的,如下图:
点击上面的按钮后,上面的Fragment文本改变,而下面不变。