平板也要兼容——碎片

1.      碎片通常都是在平板开发中才会使用的,然后可以在main activity的xml中引用

2.      动态添加碎片:FrameLayout是Android中最简单的一种布局,它没有任何的定位方式,所有的控件都会摆放在布局的左上角。由于这里仅需要在布局里放入一个碎片,因此非常适合使用FrameLayout。结合代码可以看出,动态添加碎片主要分为5步:

1)      创建待添加的碎片实例。

2)      获取到FragmentManager,在活动中可以直接调用getFragmentManager()方法得到。

3)      开启一个事务,通过调用beginTransaction()方法开启。

4)      向容器内加入碎片,一般使用replace()方法实现,需要传入容器的id和待添加的碎片实例。

5)      提交事务,调用commit()方法来完成。

3.      通过点击按钮动态添加一个碎片后,按下back键程序会直接退出,如果想实现按下back键回到上一个碎片,需要使用FragmentTransaction中提供了一个addToBackStack()方法,可以用于将一个事务添加到返回栈中。

4.      碎片与活动之间的通信:

1)      从活动中获取fragment信息:为了方便碎片和活动之间进行通信,FragmentManager提供了一个类似于findViewById()的方法,专门用于从布局文件中获取碎片的实例,代码如下所示:RightFragmentrightFragment = (RightFragment)getFragmentManager().findFragmentById(R.id.right_fragment);

2)      从fragment中调用活动的方法:getActivity()方法来得到和当前碎片相关联的活动实例,代码如下所示:MainActivityactivity = (MainActivity) getActivity();

3)      碎片之间通信:它的基本思路非常简单,首先在一个碎片中可以得到与它相关联的活动,然后再通过这个活动去获取另外一个碎片的实例,这样也就实现了不同碎片之间的通信功能

5.      碎片的生命周期:

6.      动态加载布局的技巧一:限定符可以判断不同的设备尺寸加载不同的布局文件,例如在res下面新建一个layout-large文件夹,这里面的布局文件就会被认为是large的设备加载,而小屏幕的设备还是会加载layout文件夹下的布局。Android中常见的限定符如下表:


7.      动态加载布局的技巧二:最小宽度限定符允许我们对屏幕的宽度指定一个最小指(以dp为单位),然后以这个最小值为临界点,屏幕宽度大于这个值的设备就加载一个布局,屏幕宽度小于这个值的设备就加载另一个布局。在res目录下新建layout-sw600dp文件夹,然后在这个文件夹下新建activity_main.xml布局。当程序运行在屏幕宽度大于600dp的设备上时,会加载layout-sw600dp/activity_main布局,当程序运行在屏幕宽度小于600dp的设备上时,则仍然加载默认的layout/activity_main布局。


《疯狂讲义》

深入理解Activiy和Fragment

1.      PreferenceActivity专门负责进行选项设置,与普通的Activity不同,它不再使用普通的布局文件,使用选项设置的布局文件。从Android3.0开始官方不再推荐使用PreferenceActivity加载选项设置的布局文件,而是建议将PreferenceActivity和PreferenceFragement结合使用,其中PreferenceActivity只负责加载选项设置列表的布局文件(<preference-headers>),PreferenceFragement才负责加载选项设置的布局文件(<PreferenceScreeen>)。

2.      Android中task:task是一个具有栈结构的容器,可以放置多个Activity实例。启动一个应用,系统就会为之创建一个task,来放置根Activity;默认情况下,一个Activity启动另一个Activity时,两个Activity是放置在同一个task中的,后者被压入前者所在的task栈,当用户按下后退键,后者从task被弹出,前者又显示在幕前,特别是启动其他应用中的Activity时,两个Activity对用户来说就好像是属于同一个应用;系统task和task之间是互相独立的,当我们运行一个应用时,按下Home键回到主屏,启动另一个应用,这个过程中,之前的task被转移到后台,新的task被转移到前台,其根Activity也会显示到幕前,过了一会之后,在此按下Home键回到主屏,再选择之前的应用,之前的task会被转移到前台,系统仍然保留着task内的所有Activity实例,而那个新的task会被转移到后台,如果这时用户再做后退等动作,就是针对该task内部进行操作了。

3.      Fragment与Activity之间的通信:

1)      Fragment通过getActivity()方法可以返回所在的Activity

2)      Activity获取Fragment:FragementManager中的findFragmentById(intid)或findFragmentByTag(Stringtag)方法获得指定的Fragment

3)      Activity向Fragment传递数据:在Activity中创建Bundle数据包,调用Fragment的setArgument(Bundlebundle)方法可将Bundle数据包传给Fragment

4)      Fragment向Activity传递数据或Activity需要在Fragment运行中进行实时通信:在Fragment中定义一个内部回调接口,再让包含该Fragment的Activity实现该接口,这样Fragment可调用该回调方法将数据传给Activity。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值