接着上文Android ApiDemo学习(三)activity(1)
- Intent Activity Flags:
使用intent数组自定义activity加载栈。
传统activity栈:activity1启动2,1入栈;2启动3,3入栈。点击返回按钮,2出栈,界面显示2;再点击返回,1出栈,界面显示1.
自定义栈之后,点击返回按钮,界面会跳转到intent定义的activiy。
这个test使用两种方式完成以上功能:
- Context.startActivities():可以看到,这里的activity是使用复数形式,参数中是intent数组。
-PendingIntent.getActivities():PendingIntent,按字面意思就是挂起的intent,意思就是执行getActivities之后,并不启动activity,只是get(得到)了。想要启动,需要执行PendingIntent.send()操作。把get和send分开,就可以自定义启动的时间了。
- Intents:
这个例子讲述launch多个intent。
看代码:
-定义intent时指定其action为ACTION_GET_CONTENT,之后setType为audio/*。两句合在一起表示,获得audio下的所有文件的内容。
-startActivity时没有直接将上面指定的intent放入参数,而是使用Intent.createchooser(intent, "xxxx")。官网的解释,这个参数的意思是:建立一个ACTION_CHOOSER的intent。
ACTION_CHOOSER: 显示一个activity选择器。
三句合起来,意思就是:获得audio下的所有内容,然后用户点击哪个内容,就进入到哪个内容对应的activiy中。
即,传统的activiy跳转,a——b
可以选择的activity跳转:a——b1 or b2 or b3 or b4.....具体显示哪个呢?看用户选择的是get到的content的哪个了。
可以在举一个例子说明:
Intent intent = new Intent(Intent.ACTION_MAIN);
startActivity(Intent.createChooser(intent, "select"));
这两句话的意思,就是得到一个activity选择器,这个选择器的每个activity的action都是ACTION_MAIN类型的。实现效果就是,显示一个类似dialog的东东,头部显示“select”,下面显示所有的action为ACTION_MAIN的activity的名字,用户点击某个名字之后,跳转到对应的activity。
- persisitent state
这个例子讲如何使用SharedPreference来保存UI状态。onPause中,保存editview用户输入的字符串。onResume中,设置editview显示之前保存的字符串。可以达到的效果:用户在editview输入xxx,这个acitivity返回,再打开,editview中默认显示用户上次输入的xxx。
注:SharePreference以键值对的形式保存数据
- QuickContactsDemo
该例介绍了如何使用Content Provider来访问Android系统的Contacts 数据库。
Content Provider为不同应用之间共享数据提供了统一的接口,通过对底层数据源的抽象,Content Provider实现了应用程序代码和数据层分离。Android平台对大部分的系统数据库都提供了对应的Content Provider接口:例如通讯录啊,settings啊等。
Android系统的每个Content Provider都定义了一个CONTENT_URI,功能类似于数据库的名称。Android中每个Context对象(如Activity)对含有一个ContentResolver,ContentResolver可以根据CONTENT_URI获取对应的Content Provider
看代码:
首先执行:getContentResolver().query();getContentResolver() 取到一个ContentResolver对象,之后在一个数据库里执行一个query查询操作,查询的CONTENT_URI、查询对象、条件、sql语句等都在query的参数中保存即可。query返回结果集的cursor。
然后:需要把这个结果集以listview的形式显示出来,那么就要一个adapter来做cursor指向的数据集和listview之间的桥梁。接着看这个adapter的定义。
adapter:自定义的adapter继承了ResourceCursorAdapter。顾名思义,这个adapter的数据时从cursor来的。本例重写的newView和bindView实现了从cursor中取出数据,然后对应显示在控件中(自定义的xml布局文件)。注意,这些函数参数中的cursor已经移动到正确位置。也就是说,每次取cursor指向的数据,执行newView和bindView,绘制好后,cursor会自动移动到下一个,绘制下一行数据。