首页 > 移动平台 > 详细

Android-----Fragment

时间:2014-01-25 20:40:27      阅读:434      评论:0      收藏:0      [点我收藏+]

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

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

bubuko.com,布布扣
Fragment生命周期:
1、onCreate
回调函数:onAttach()第一次与Activity时调用
          onCreate()初始化Fragment
         onCreateView()创建Fragment的视图层级
          onActivityCreated()当Host活动已经完成了对其onCreate()调用之后才能调用
2、onStart:当Fragment对于用户可见时调用
3、onResume:
4、onPause:
5、onStop:
6、onDestroy:
bubuko.com,布布扣
bubuko.com,布布扣
和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;
}
bubuko.com,布布扣
第三步:在Activity中添加Fragment
bubuko.com,布布扣
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>
bubuko.com,布布扣
bubuko.com,布布扣
B、在Activity运行时添加Fragment
//实例化ListFragment的对象
ListFragment listFragment = new ListFragment();
//获得一个FragmentTransaction的实例
FragmentTransation ft = getFragmentManager().beginTransaction();
//添加一个显示详细内容的Fragment
ft.add(android.R,id.content,listFragment).commit();
//提交事务
ft.commit();
bubuko.com,布布扣
bubuko.com,布布扣
bubuko.com,布布扣
bubuko.com,布布扣
新知识点:
bubuko.com,布布扣
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在回复状态时才可以从布局中被添加或者移除。
bubuko.com,布布扣
bubuko.com,布布扣
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();
bubuko.com,布布扣
3、保存Fragment状态
Android3.2引入了另一个有意思的类:Fragment.SavedState
bubuko.com,布布扣
bubuko.com,布布扣
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");
bubuko.com,布布扣

Android-----Fragment

原文:http://www.cnblogs.com/vijay/p/3533402.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!