1. 特性
-
具备生命周期,感觉就像是子activity
-
但是必须委托在activity中才能运行。
2.使用
-
先在主文件 也就是main_activity.xml中布局
可以直接通过name属性来指定要添加的fragment的类名,要写全名称
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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"> <!-- 可以直接通过name属性来指定要添加的fragment的类名,要写全名称--> <FrameLayout android:id="@+id/main_page_container" android:name:"com.example.demo.fragment" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
-
编写fragment.xml文件
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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"> <TextView android:id="@+id/p_ds" android:layout_width="0dp" android:layout_height="50dp" android:layout_weight="1" android:gravity="center" android:textSize="@dimen/size_20" android:text="数据测试"/> </RelativeLayout>
-
加载fragment的布局文件
-
需要继承Fragment类
-
需要重写 onCreateView ()这个方法。
-
使用inflate()方法去加载布局文件。
-
返回加载的视图给activity。
-
-
public class FragmentAnalysis extends Fragment { private View view; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { if(view==null){ view = inflater.inflate(R.layout.fragment, container, false); } return view; }
3.事件的点击
对于fragment的事件响应,可以有两个方法
- 既然fragment是依附activity中,那么在activity中进行事件的响应。但是对于 viewpageer+fragment的布局来说,方法一不是很合适。
- 在fragment中重写 onActivityCreated()
/**
* 在fragment中的点击事件的响应,得放在onActivityCreated函数中。
* 使用getActivity().findViewById()函数去获取到响应的组件
* @param savedInstanceState
*/
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
dataSource = getActivity().findViewById(R.id.p_ds);
dataSource.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dataSource.setText("nihao");
}
});
}