Android-----Fragment

Fragment提供了把UI分解成不同组成部分的方法,从而使得每一个部分都能在其运行的设备上以正确的形式被展现。

在手机上,列表视图会占据整个屏幕,点击一个列表项将会把用户带到新的屏幕以展示内容。但是在平板电脑上,列表视图只显示一部分,内容也会被同步展示。

Fragment生命周期:
1、onCreate
回调函数:onAttach()第一次与Activity时调用
          onCreate()初始化Fragment
         onCreateView()创建Fragment的视图层级
          onActivityCreated()当Host活动已经完成了对其onCreate()调用之后才能调用
2、onStart:当Fragment对于用户可见时调用
3、onResume:
4、onPause:
5、onStop:
6、onDestroy:
和ListView一样,Fragment也有一个三部曲
第一步:创建Fragment布局
在XML布局方面,Fragment和Activity无差异
第二步:加载Fragment布局
public View onCreateView(LayoutInflater inflater,ViewGroup ontainer.Bundle savedInstanceState){
    View view = inflater.inflate(R.layout.news,container,true);
    return view;
}
第三步:在Activity中添加Fragment
A、直接在布局文件中添加Fragment
<LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal">
    
    <fragment android:name="com.vijay.ListFragment"
        android:id="@+id/list"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent" />
</LinearLayout>
B、在Activity运行时添加Fragment
//实例化ListFragment的对象
ListFragment listFragment = new ListFragment();
//获得一个FragmentTransaction的实例
FragmentTransation ft = getFragmentManager().beginTransaction();
//添加一个显示详细内容的Fragment
ft.add(android.R,id.content,listFragment).commit();
//提交事务
ft.commit();
新知识点:
1、Fragment事务
由于在屏幕上可以一次展示多个Fragment,所以在不转换Activity的情况下添加和移除他们是可能的。要更改Ui中现有的Fragment,必须把他们封装到一个事物Transaction中。Fragment事务与数据库事务类似,对所有会影响到Fragment的操作进行批处理并会同时执行这些操作。
操作如下:
FragmentManager fm = getFragmentManager();
FragmentTransation ft = fm.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
ft.add(R.id.fragment_container,fragment);
ft.commit();
这里,一个新的Fragment被添加到UI上。
同时,Fragment也可以通过他们的ID或者通过标签字符串来引用。
fm.findFragmentById(R.id.frag);
fm.findFragmentByTag("tag")
注意:Fragment仅当Activity在回复状态时才可以从布局中被添加或者移除。
2、Fragment回退栈
Fragment fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
ft.add(R.id.fragment_container,fragment);
//takes a String name argument,not userd here
ft.addToBackStack(null);
ft.commit();
3、保存Fragment状态
Android3.2引入了另一个有意思的类:Fragment.SavedState
Fragment之间的通信方式

A、Fragment到Fragment直接通信
FragmentOther fragOther = (FragmentOther)getFragmentManager().findFragmentByTag(
"other");

B、Fragment到目标Fragment的设置
mCalledFragment = new CalledFragment();
mCalledFragment.setTargetFragment(this,0);
fm.beginTransaction().add(mCalledFragment,"work").commit();

C、目标Fragment到Fragment的通信
TextView tv =(TextView)getTargetFragment().getView().findViewById(R.id.text1);
tv.setText("Set from the called fragment");
原文地址:https://www.cnblogs.com/vijay/p/3533402.html