Android 学习笔记13:Fragment

Fragment简介

每一个fragment都包含自己的UI布局,并接受输入事件,且必须绑定到某个Activity中。fragment的主要作用是将Activity拆分成多个独立封装的可重用组件,每个组件有自己的生命周期和UI布局,

使得应用在不同尺寸的设备上都有较好的显示效果。它们可以在Activity处于运行状态时动态地添加和删除,可以对输入事件进行响应。

Fragment生命周期

首先Fragment不同于Activity的是,Fragment的生命周期收到它所绑定的Activity影响。比如:activity处于销毁状态时,它的所有fragment也一样。但是activity处于运行状态时就可以单独维护每一个fragment的状态。

其次Activity处于停止状态时系统默认会在back stack中保存它的实例,而Fragment从Activity上移除是必须显示得调用addToBackStack( )才会添加到back stack

Fragment有三个状态:

活动状态:该Fragment在活动的Activity上可见

暂停状态:其他Activity位于前台,该Fragment的Activity仍然可见

停止状态:绑定的Activity处于停止状态或者Fragment从Activity移除

销毁状态:当它的Activity被销毁是

Fragment的回调函数和Activity对它生命周期的影响见下图:


onAttach、onCreate、onDestory和onDetch只会调用一次


官方文档

Fragment的创建

继承Fragment或者它的子类(ListFragment、DialogFragmentPreferenceFragment)类,然后重写相应的方法:onCreate()  onCreateView() onPause()常用

<span style="font-size:14px;">public class MyFragment extends ListFragment{
	String[] names = {"skq","csy","sdf","sdffg","qwe"};
	/*如果fragment有自己的ui,重写该方法,返回对应的View
	public View onCreateView(LayoutInflater inflater,
			ViewGroup group,Bundle savedBundle){
		return inflater.inflate(R.layout.fragment,group,false);
	}
	
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		setListAdapter(new ArrayAdapter<String>(getActivity(),
				android.R.layout.simple_list_item_1,names));
	}
	
	public void onListItemClick(ListView parent, View v,int position, long id){
		Toast.makeText(getActivity(), "you have selected "+names[position], 
				Toast.LENGTH_SHORT).show();
	}
}</span>
Fragment是不需要再manifest中注册的,因为它必须绑定到某一个activity上。

Fragment添加

每一个Activity都包含一个fragment Manager 来管理它包含的Fragment。

通过FragmentManager manager = getFragmentManager()获得。

方法一:通过布局文件添加Fragment

该方法静态得添加Fragment ,一旦Activity被创建,Fragment就会被填充。

<span style="font-size:14px;"> <fragment 
        android:name = "com.example.activitytest.Fragment"
        android:id="@+id/framgent2"
        android:layout_width="0dp"
        android:layout_height="300dp"
        android:layout_weight="0.5"/></span>

name属性指定Fragment类的路径。

方法二:通过代码添加Fragment 

<span style="font-size:14px;">MyFragment fragment1 = new MyFragment();
FragmentManager fragmentManager = getFragmentManager();     //获得fragmentManager
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();//获得fragmentTransaction
fragmentTransaction.replace(R.id.main_layout, fragment1,"first"); //替换fragment
//还可以是添加(add)、删除(remove)fragment
fragmentTransaction.commit();//提交事务</span>
 

Fragment的信息交流

fragment获得activity的信息:

通过调用getActivity()可以获得该fragment绑定的activity实例。

activity获得fragment的信息:

通过调用getFragmentManager()可以获得fragment管理器,再通过getFragmentById()或getFragmentByTag()获取对应的fragment 

activity和fragment间共享事件信息:

在fragment中声明一个接口,并保存一个该接口的引用,然后在onAttach中把绑定的Activity复制给这个引用,同时添加该Fragment的Activity必须实现该接口。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值