ExpandableListActivity
[功能]
sdk 也有关于ExpandableListActivity 代码例子 路径如下:
但是sample例子所使用的数据源是静态的 即不能实时变化 使得其实用性大打折扣 现在以动态数据为例
[代码 步骤]
1. 规划数据结构用于存放 Group 及其 子数据 Child
//存放 Groop 数据 public List<String> group; //存放 Child 数据 以其所属于的Group细分 public List<List<String>> child;
2. 定义 class ExpandInfoAdapter extends BaseExpandableListAdapter
public class ExpandInfoAdapter extends BaseExpandableListAdapter { @Override public Object getChild(int arg0, int arg1) { // TODO Auto-generated method stub return null; } @Override public long getChildId(int arg0, int arg1) { // TODO Auto-generated method stub return 0; } @Override public View getChildView(int arg0, int arg1, boolean arg2, View arg3, ViewGroup arg4) { // TODO Auto-generated method stub return null; } @Override public int getChildrenCount(int arg0) { // TODO Auto-generated method stub return 0; } @Override public Object getGroup(int arg0) { // TODO Auto-generated method stub return null; } @Override public int getGroupCount() { // TODO Auto-generated method stub return 0; } @Override public long getGroupId(int arg0) { // TODO Auto-generated method stub return 0; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { // TODO Auto-generated method stub return null; } @Override public boolean hasStableIds() { // TODO Auto-generated method stub return false; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { // TODO Auto-generated method stub return false; } }
3. 填充ExpandInfoAdapter 的函数
* 完成与 Child 功能相关的函数列表
public long getChildId(int arg0, int arg1)
public View getChildView(int arg0, int arg1, boolean arg2, View arg3,
ViewGroup arg4)
public int getChildrenCount(int arg0)
其实现如下:
@Override public Object getChild(int arg0, int arg1) { // TODO Auto-generated method stub return child.get(arg0).get(arg1); } @Override public long getChildId(int arg0, int arg1) { // TODO Auto-generated method stub return arg1; } @Override public int getChildrenCount(int arg0) { // TODO Auto-generated method stub return child.get(arg0).size(); } @Override public View getChildView(int arg0, int arg1, boolean arg2, View arg3, ViewGroup arg4) { // TODO Auto-generated method stub return getChildViewStub(child.get(arg0).get(arg1).toString()); } public TextView getChildViewStub(String s) { // Layout parameters for the ExpandableListView AbsListView.LayoutParams lp = new AbsListView.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, 64); TextView text = new TextView(activity); text.setLayoutParams(lp); text.setTextSize(20); text.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); text.setPadding(36, 0, 0, 0); text.setText(s); return text; }
* 再完成与 Group 有关的函数列表
public int getGroupCount()
public long getGroupId(int arg0)
public View getGroupView(int arg0, boolean arg1, View arg2,
ViewGroup arg3)
其实现如下:
@Override public int getGroupCount() { // TODO Auto-generated method stub return group.size(); } @Override public long getGroupId(int arg0) { // TODO Auto-generated method stub return arg0; } @Override public View getGroupView(int arg0, boolean arg1, View arg2, ViewGroup arg3) { // TODO Auto-generated method stub return getGroupViewStub(getGroup(arg0).toString()); } public TextView getGroupViewStub(String s) { // Layout parameters for the ExpandableListView AbsListView.LayoutParams lp = new AbsListView.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, 64); TextView text = new TextView(activity); text.setLayoutParams(lp); text.setTextSize(20); text.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); text.setPadding(36, 0, 0, 0); text.setText(s); return text; }
4. BaseExpandableListAdapter 除了 Group Child 外 还有一些别的函数 如:
*
public void onGroupExpanded(int groupPosition){ } public void onGroupCollapsed(int groupPosition){ }
*
public boolean isChildSelectable(int arg0, int arg1) { // TODO Auto-generated method stub return true; }
5. 插入数据
public void addItemByValue(String n,String c1,String c2){ group.add(n); List<String> item = new ArrayList<String>(); item.add(NAME+n); item.add(PHONE+c1); item.add(SEX+c2); child.add(item); }
本例的数据为:
addItemByValue("Griffin","051782214","man"); addItemByValue("Billy","110","mal"); addItemByValue("Kindy","132","femal"); addItemByValue("Patric","13321234562","femal");
6. emulator 运行截图:
* Group 的截图:
* Griffin 选项展开截图:
* Patric 选项展开截图:
done!
可以啊 你只需定制化方法:getChildView() 即可
重写adapter,在item里面加上checkbox,外边定义一个数组,定义哪个被check,哪个没有
每次更新notifydatachange就OK了
(1) 命令补齐:当输入了命令名的前几个字母后,按 Tab 键 Bash 会尝试着补齐该命令剩下的几个字母。
(2) 命令行编辑快捷键:
Ctrl+a 光标跳到行头;
Ctrl+e 光标跳到行尾;
Ctrl+l 清屏并把当前命令作为屏幕上第一条命令显示。
(3) 命令历史记录:向上或向下箭头可访问命令历史记录。输入!号和历史表中命令的第一个字符,就可以执行最近一条以该字母开头的命令。
(4) 选取和粘贴文本:当想要将选取的文本粘贴到命令行的光标所在处时,只要按一下鼠标右键即可。
(5) 管道与输入、输出重定向
可以使用管道 (|) 将多个命令连接起来,把前一个命令的输出作为后一个命令的输入。例如
#ls -l -a | more
前一个命令“ ls -l -a ”的输出不再是显示到标准输出设备(屏幕终端),而是被重定向为后一个命令“ more ”的标准输入。
Bash 中还可以利用重定向符号“〈”和“〉”重定向标准输入和输出。例如,使用命令
#ls -l -a > f1
则可以将命令“ ls -l -a ”的输出保存到文件“ f1 ”中。在执行该重定向命令前,若文件 f1 不存在则会创建该文件,若文件 f1 已经存在则会覆盖原先的文件。有时,在使用该重定向功能时,我们希望将一个命令的执行结果追加到已有的文件之后,而不是将原先的文件覆盖,这时可以使用非破坏性的追加重定向操作符“〉〉”。例如,可以使用命令
#ls -l -a 〉〉 f1
同样,可以用符号“〈”把文件内容作为标准输入。
(6) 命令替换:命令替换类似于管道命令,但不同之处在于,管道中一个命令的标准输出被重定向到另一命令的标准输入,而命令替换中一个命令的标准输出变成另一命令的变元或参数。它的语法格式可以表示为
#command1 `command2`
注:所使用的是向后的单引号。
下面,我们来看一个例子。假设要压缩所有扩展名为 .txt 的文件,可以用命令:
#gzip `find / -name *.txt -print`
其中,命令“ find / -name *.txt -print ”的作用是得到所有这些文件的清单。
1. Google Map的定位
(1)Google公司针对Symbian,J2ME,WM推出的最新Google Map拥有定位功能,但是这个定位并不是基于GPS(接收卫星信号)的定位。而是基于A-GPS(主要接收基站信号)定位。Google这项技术基于手机基站ID信息(根据手机移动网络的发射塔来确定手机的相对位置),Google Map的定位数据是中国移动提供的,实际上中国移动等运营商也有类似的mobile定位增值业务,但从未以免费软件的方式出现。相比GPS定位,这种定位方式速度更快,在室内也可使用,并且不会像GPS模块一样消耗手机电能,但缺点是定位信息不够准确,精度可能仅有几百米。Google保证这项服务不会收集用户信息,不会涉及任何隐私,用户也可以随时关闭该定位功能。 目前该项服务支持的国家和地区超过20个,包括美国、欧洲大部分国家、澳大利亚、新西兰、俄罗斯和中国台湾。大陆和日本的基站位置数据库尚未添加。
(2)A-GPS首次定位时间短,可以快速启动,GPS启动后需要寻星,这个过程用时较长。A-GPS也可以通过GPS卫星定位,即关闭GPRS后,A-GPS和GPS一样还可以利用卫星定位。
(3)Google Map的定位数据是中国移动提供的,是否意味着移动将用户位置信息提供给了Google?不是,移动并不是把用户信息提供给Google,而只需把基站地理位置提供就可以了。Google从移动那获得基站位置数据,然后用户通过GPRS会获得附近几个可连接基站的ID(和基站通讯),把这些ID传给Google,Google再从数据库中查出地理位置并传回给用户。这个过程中Google并没有获得用户信息。
2. GPS导航入门
(1)什么是GPS:通过在2万公里高空的美国的24颗卫星所发射免费的信号,通过接收设备,来确定您的具体位置(经纬度、高度、速度、航向)的系统。注意,这个服务是免费的。
(2)GPS的实现方案
1)GPS专业车载导航仪方案:专门用于车载导航的机器,内置正版的专业导航软件(如道道通、灵图、城际通、凯立德、route66等,也有的品牌可以安装破解版,价格可以便宜不少),一般安装直流平板陶瓷天线,接受GPS信号能力强大,搜星速度快,可以实现快速开机导航。由于整个机器都是用于导航的,所以比PDA、手机的GPS导航更流畅,很少出现死机、顿机等情况,搜索目的地也快很多。同时最大的特点就是省事。开机就可以用,不用安装软件,不用进行设置,不用进行蓝牙匹配(这些在手机GPS方案中都要涉及)。主流机型:中环导航、朗视通、Garmin、神达。大品牌有全国联保。
2)手机、PDA、笔记本GPS方案:需要你去买一个蓝牙GPS接收器,然后和你的现有设备(手机、PDA、笔记本)配合使用。需要您的手机、PDA、笔记本具有蓝牙功能。如果你的笔记本没有蓝牙,可以购买蓝牙适配器,使您的笔记本具备蓝牙功能。要实现导航,还需要软件地图,这些都可以从 网上下载。也可以购买正版地图。如果您想要您的手机/PDA同时安装多个地图软件,那您需要一个比较大的存储卡。
3)GPS一体机方案:一体机就是PDA或手机具备GPS功能,有的甚至自带正版地图,买回来打开就可以用。
4)GPS手持机:GPS手持机,主要用于专业定位导航、户外探险等,在恶劣环境下可以稳定使用。主要是美国的产品,如Garmin等品牌。
(3) 如何选择蓝牙GPS模块:GPS芯片,导航的准确性最关键的是接受卫星信号的精度和算法。而卫星接收性能,主要由GPS的芯片决定。现在主流的是 Sirf三代芯片具有20个卫星通道(sirf二代有12个通道)。其他的还有sony的芯片和瑞士的RFMD芯片。这些芯片在实际使用中的效果和sirf的有明显的差距。还有GPS电源和GPS天线也要重点考虑。
(4)GPS地图软件:每一种GPS导航软件,都是针对不同的操作系统开发的,或者说它会发布几个版本,针对不同的操作系统。
(5) 手机GPS和纯GPS区别:手机GPS波特率都是4800的,定位信息1秒刷新一次,有部分的车载GPS是38400的波特率
定位信息1秒刷新5次,也就是说一个100km/h的物体如果没有惯性导航软件的话,手机GPS的位置误差要在原有精度上+-28米,而车载GPS误差+-5米。
3. GPS的输出
GPS定位信息串行输出格式大多采用美国国家海洋电子协会制定的NMEA-0183 通信标准格式。其输出数据采用的是ASCII码,内容包含了纬度、经度、高度、速度、日期、时间、航向以及卫星状况等信息。具体输出格式及输出标准、精度等请用到时再查阅。