碎片可以看成是一种特殊的活动,也就是特殊的页面。
写一个碎片
碎片和活动一样,用来写页面,页面或一个java类和一个布局文件组成。
写碎片布局
在 layout 目录下创建 fragment_index.xml 文件。
<FrameLayout android:layout_width="match_parent"android:layout_height="match_parent"xmlns:android="http://schemas.android.com/apk/res/android"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="首页"/></FrameLayout>
写java类
普通的 java 类怎样会被认为是一个碎片呢?只需要继承 Fragment 类,并且实现它的 onCreateView 方法即可,在该方法中将碎片布局文件与类进行绑定。
public class IndexFragment extends Fragment {@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_index, container, false);return view;}}
用一个碎片
碎片定义好,怎么使用?在活动布局文件中直接用 fragment 控件,并且设置 name 属性指向碎片 java 类位置。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><fragmentandroid:name="top.dkvirus.novel.pages.index.IndexFragment"android:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout>
动态替换碎片
private void replaceFragment (Fragment fragment) {FragmentManager manager = getSupportFragmentManager();FragmentTransaction transaction = manager.beginTransaction();transaction.replace(R.id.wrapper, fragment);transaction.commit();}// 要替换碎片只需调用 replaceFragment(new IndexFragment());
活动与碎片之间通信
在活动中获取碎片
在活动中拿到碎片就可以调用碎片内的方法了。
IndexFragment fragment = (IndexFragment) getFragmentManager().findFragmentById(R.id.fragment_index);
在碎片中获取活动
MainActivity activity = (MainActivity) getActivity();
