安卓应用的多个Activity组成Activity栈,当前活动的Activity位于栈顶。
1.LauncherActivity:继承于ListActivity,需要为其设置Adapter,
并重写Intent intentForPosition(int position)方法,该方法根据不同列表项返回不同的Intent(用于启动不同的Activity).
2.ExpandableListActivity:可展开的Activity,需要为该Activity传入ExpandableListAdapter对象,接下来ExpandableListActivity
将会生成一个显示可展开列表的窗口。
3.PreferenceActivity:如果应用程序中包含的某个Activity专门用于设置选项参数,可以使用该类。该类不再使用普通的界面布局文件,而是使用选项设置的布局文件
Activity的启动与关闭:
启动:startActivity(Intent intent);
startActivityForResult(Intent intent,int requestCode);程序可以获取到新启动Activity的返回结果,通过写onActivityResult()方法来获取返回的内容。
关闭:finish();关闭当前Activity
finishActivity(int requestCode);结束以指定code启动的Activity
使用Bundle在Activity之间交换数据:
Bundle是一个简单的数据携带包,该Bundle对象有如下方法来存入数据:putXxx(String key , Xxx data);向Bundle中放入Int、Long等各种类型的数据。
putSerializable(String key , Serializable data);向Bundle中放入一个可序列化的对象
如下方法用来取出Bundle数据携带包里的数据:
getXxx(String key);从Bundle中取出Int、Long等各种类型的数据。
getSerializable(String key , Serializable data);从Bundle中取出一个可序列化的对象
使用Bundle在Activity之间交换数据:
putExtras(Bundle data);向Intent中放入需要携带的数据包
Bundle getExtras();取出Intent中携带的数据包
putExtra(String name,Xxx value);向Intent中按键值对存入数据
getXxxExtra(String name);从Intent中按key值取出指定类型数据
Activity的生命周期与加载模式
Activity大致会经过如下四种状态:
运行状态:当前Activity位于前台,用户可见,可获得焦点
暂停状态:其他Activity位于前台,该Activity依然可见但是不能获得焦点
停止状态:该Actvity不可见,失去焦点
销毁状态:该Activity结束,或Activity所在的进程被结束
生命周期:onCreate(Bundle savedStatus);创建Activity时被回调,此方法只会被调用一次。
onStart();启动Activity时被回调。
onRestart();重新启动Activity时被调用
onResume();恢复Activity时被调用,在onStart()方法之后一定会被调用
onPause();暂停时被调用
onStop();停止时被调用
onDestory();销毁时被回调。
加载模式:Activity由Task管理,当启动一个应用时安卓会为其创建一个Task,配置Activity时可指定android:launchMode属性,该属性用于配置该Activity的加载模式,支持如下4种属性值:
standard:标准模式,默认的加载模式,使用此种模式时系统会为Activity创建一个新的实例,并将该Activity添加到当前Task栈顶,系统不会为其创建新的Task.
singleTop:Task栈顶单例模式,栈顶Activity只有一个实例,不会在为其创建新的实例,如果要启动的Activity不是栈顶的,则会为其再创建新的实例。
singleTask:Task内单例模式,采用这种加载模式的Activity在同一个Task内只有一个实例,如果将要启动的Activity不存在,系统会创建目标Activity,并将其加入栈顶;如果要启动的Activity已经位于栈顶则不会在为其创建新的实例;如果目标Activity不位于栈顶系统会将位于该Activity上的所有Activity移出Task栈,从而使目标Activity转入栈顶
singleInstance:全局单例模式,无论在哪个Task中启动Activity都只会创建一个目标Activity实例,并且使用一个全新的Task栈来管理该Activity实例。
Fragement即为片段,是安卓3.0之后才出现的,为了在3.0以前的手机也能使用,通常导入android.support.v4.app.Fragment,这个包中同时有FragmentActivity,都是为了兼容安卓3.0之前的版本,当然使用FragmentActivity时获取FragmentManager的方法有所不同,为getSupportFragmentManager(),Fragment要依托于Activity才能使用,Fragement的生命周期会受它所依托的Activity的生命周期的影响。
创建Fragement:需要覆写如下三种方法:
1.onCreate();在系统创建Fragement对象后就会回调该方法
2.onCreateView();Fragement绘制界面组件时会回调该方法,会返回该Fragement所显示的View
3.onPause();用户离开时回调
Fragement与Activity通信:
1.将Fragement添加到Activity中:在布局文件中添加,name属性用来是定Fragement的实现类; 在java代码中通过FragementTransaction对象的add()方法来添加。
2.获取Fragement或Activity:Fragement获取它所在的Activity:调用getActivity()方法
Activity获取它所包含的Fragement:调用Activity的FragementManager的findFragementById(int id)或findFragementByTag(String tag)方法即可获取指定的Fragement。
3.传递数据:Activity向Fragement传递数据:调用Fragement的setArguements(Bundle Bundle)方法; Fragement向Activity传递数据:在Fragement中定义一个内部回调接口,在让包含该Fragement的Activity实现该回调接口,这样Fragement即可调用该回调方法将数据传给Activity。
Fragement管理与Fragement事务:
1.Activity管理Fragement主要依靠FragementManager,FragementManager可以用来获取指定Fragement,还可以调用popBackStack()将Fragement从后台栈中弹出,还可以调用addOnBackStackChangeListener()注册一个监听器监听后台栈的变化。
2.添加、删除、替换Fragement 需要借助FragementTransaction对象的add();remove();replace();等方法,最后需要调用commit()方法提交事务,在提交之前也可调用addToBackStack()将事务添加到Back栈,这样按返回键就可以回到改变之前的Fragment,获取FragmentTransaction可使用FragementManager的beginTransaction()方法。
Fragment生命周期:
Fragment结合ViewPager实现界面滑动:
layout管理器允许页面可以左右滑动,可以实现PagerAdapter接口来显示该效果,ViewPager很多时候会结合Fragment一起使用,此时可以实现FragmentPagerAdapter或FragmentStatePagerAdapter
-------------------这些博客都是我之前在学习过程中自书中摘出的重点,以及一些前辈总结的经验,外加一些自己的感悟,如果有前辈看到,有不对的地方希望大家指出,非常感谢。