Fragment(碎片)的静态创建
什么是碎片?
简单来说上图的左半边 就是一个碎片 右半边也是一个碎片 -- 基础阶段先这样理解 什么是静态创建碎片? 就是在一个主Activity.xml文件布局里布局好fragment(碎片) -- 可以看成大容器的一个小布局 注意:碎片类都要继承Fragment 接下来实现上图界面布局 -- 碎片的静态创建 1、在res/layout布局文件里有3个布局 1 -- 一个activity_main.xml -- 用来放左边和右边的碎片 2 -- 一个left_fragment.xml -- ListView -- 把数据绑到该ListView上 然后在把该ListView 放到左边的碎片上 3 -- 一个right_fragment.xml -- TextView -- 把TextView放到右边碎片上activity_main.xml布局文件代码<LinearLayout xmlns:android="" xmlns:tools="" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" ><!-- name里 为 包名.类名 --><!--左边的碎片--> <fragment android:id="@+id/left_fragment" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:name="com.example.fragment_static.Left_fragment"/> <!--右边的碎片--> <fragment android:id="@+id/right_fragment" android:layout_width="0dp" android:layout_weight="2" android:layout_height="wrap_content" android:name="com.example.fragment_static.Right_fragment" /></LinearLayout>------------------
left_fragment.xml布局文件
代码<LinearLayout xmlns:android=""
xmlns:tools="" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"><ListView
android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" /></LinearLayout>
------------------right_fragment布局文件代码
<LinearLayout xmlns:android=""
xmlns:tools="" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" ><TextView
android:id="@+id/right_textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="右边fragment" /></LinearLayout>
==================================
2、Left_fragment(左边碎片) 类名
代码
public class Left_fragment extends Fragment {
private ArrayAdapter<String> adapter;
private ListView listview; @Override//fragment被添加到宿主Activity时被回调 -- 紧回调一次 public void onAttach(Activity activity) { super.onAttach(activity); } @Override//创建fragment时回调 -- 紧回调一次 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //初始化 需要的数据 String[] names = new String[20]; for(int i = 0;i<20;i++){ names[i] = "lala" + i; } adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, names); } //必须重写该方法 @Override//每次创建 、绘制fragment时 都会调用该 方法 -- 调用多次 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.left_fragment,container, false); listview = (ListView) view.findViewById(R.id.listview); listview.setAdapter(adapter); //返回一个ListView 布局视图到有该类 -- 包名.类名 的Fragment(碎片) 布局上 return view; }}------------------3、Right_fragment(碎片) 类
代码
public class Right_fragment extends Fragment {
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.right_fragment, container, false); //返回一个TextView到 右边的碎片上 return view; }}-----------------
4、MainActivity 类
代码
public class MainActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }}==============================================
Fragment生命周期:
(一)、Fragment基本状态:1、活动状态:Resumed 当前Fragment位于前台,用户可见,可以获得焦点;2、暂停状态: Paused 另一个Activity处于前台并拥有焦点, 但是该Fragment所在的Activity仍然可见(前台Activity局部透明或者没有覆 盖整个屏幕),不过不能获得焦点;3、停止状态:Stopped
要么是宿主Activity已经被停止, 要么是Fragment从Activity被移除但被添加到回退栈中; 停止状态的Fragment仍然活着(所有状态和成员信息被系统保持着)。 然而, 它对用户不再可见, 并且如果Activity被销毁,它也会被销毁;
4、销毁状态:Destroyed 只能等待被回收。
(二)、Fragment生命周期:【重点】
1、onAttach(): 当该Fragment被添加到Activity时被回调。该方法只会被调用一次;2、onCreate(): 当创建Fragment时被回调。该方法只会被调用一次;
3、onCreateView():每次创建、绘制该Fragment的View组件时回调该方法,Fragment将会显示该方法返回的View 组件;
4、onActivityCreated(): 当Fragment的宿主Activity被启动完成后回调该方法;
5、onStart(): 启动Fragment时被回调;
6、onResume(): onStart()方法后一定会回调onResume()方法;
7、onPause(): 暂停Fragment时被回调;
8、onStop(): 停止Fragment时被回调;
9、onDestroyView(): 销毁该Fragment所包含的View组件时调用;
10、onDestroy(): 销毁Fragment时被回调。该方法只会被调用一次;
11、onDetach(): 将Fragment从Activity中删除、替换完成时调用该方法。onDestroy()方法后一定会回调onDetach()方法。 该方法只会被调用一次。
12、onInflate():
13、onViewCreated():
【备注:】其中大多数程序必须实现Fragment的三个回调方法分别为:
onCreate :系统创建Fragments 时调用,可做执行初始化工作或者当程序被暂停或停止时用来恢复状态,跟Activity 中的onCreate相当。 onCreateView :用于首次绘制用户界面的回调方法,必须返回要创建的Fragment 视图UI。假如你不希望提供Fragment用户界面则可以 返回NULL。onPause : 当用户离开这个Fragment的时候调用,这时你要提交任何应该持久的变化,因为用户可能不会回来。