android中级培训,Android 中级学习心得

不知不觉一个月又过去了,中级部分已经学习完毕,给大家讲讲学习心得,希望对新人有所帮助,中级部分主要是一些控件的设置,以及实现一些控件的功能。

Android通知系统,Tostask 比较常用;进度条progressBar,用于下载和音乐播放器以及用户等待时间等;

Listview常常用到的:

功能:用来批量展示信息,以垂直列表形式显示所有列表项

listview是一个组合控件

基本控件:内容和控件在一个对象里面

组合控件:内容和控件不在同一个对象里面

listview

listview本身这个控件: 框跟行分隔

Adapter(适配器): 所有行内容

listview实现步骤:

1、在布局文件上面设置一个listview控制

2、创建一个listview的行布局(通常用RelativeLayout)

3、在Activity里面查找到listview控件对象。

4、为listview控件对象设置一个适配器(对象.setAdapter(适配器对象))

5、创建一个适配器对象(通常用的是BaseAdapter)

BaseAdapter adapter = new BaseAdapter() {

//设置listview行布局和内容

public View getView(int position, View convertView, ViewGroup parent) {

//得到一个布局转换器

LayoutInflater layoutInflater = getLayoutInflater();

//通过布局转换器把行布局文件转换成可用的布局对象

RelativeLayout inflate =

(RelativeLayout) layoutInflater.inflate(R.layout.list_item, null);

//查找布局对象里面存放的控件

TextView textView = (TextView) inflate.findViewById(R.id.textView1);

//获取行号对应的信息内容

String text = arrayList.get(position);

textView.setText(text );

return inflate;

}

//决定listview的行数

public int getCount() {

return arrayList.size();

}

};

注意:getView()方法调用:界面上每出现一行就调用一次getview();

getCount() 第一次调用在getview之前

注意:listview的高度不能设置成wrap_content。可以指定高度XXdp或者设置长match_praent

线程也很重要,主要用到AsyncTask (异步加载):

好处:1、不需要我们自己创建线程,降低难度

2、线程池:复用了Thread对象,提高了性能

缺点:使用步骤稍多,代码可读性差一点

使用步骤:

1、创建一个类继承AsyncTask

三个泛型参数: 1、决定了task.execute(xxx)的参数类型

以及doinbackground()方法的参数类型

2、决定了doinbackground()里面调用publishProgress(xx)的参数类型

以及onProgressUpdate()方法传入的参数类型

3、决定了doinbackground()方法的返回值类型

以及onPostExecute()的参数类型

2、重写doinbackground()方法

耗时操作放在这个方法里面执行(系统new的子线程)

return(执行耗时操作之后返回一个值给main线程)

3、重写onPostExecute()

调用时间:doinbackground()执行完后,返回一个值的时候,onPostExecute()才被调用

接收doinbackground返回值。

所在线程:main线程

4、启动异步任务

a、XXXAsyncTask task = new XXXAsyncTask();创建AsyncTask对象

b、task.execute(xxxx) 启动异步加载

中间过程如何发送消息到主线程

1、在doinbackground方法里面调用:publishProgress()

2、重写onProgressUpdata(),接收数据,并更新UI(main线程里面)

onPreExecute()方法是在doinbackground之前运行

AsyncTask内部方法的先后顺序

onPreExecute() ————》doinbackground()——————》onPostExecute()

调用 publishProgress() ————————》onProgressUpdata()

还有就是数据的读取跟解析 目前用的最多就是JSON。

网络传输中,数据的组织方式:

xml,json,http

xml 可扩展的标记语言

跨平台、依赖于内容的技术,简单的数据存储语言。

解析xml文件的方式:

三种: sax dom pull

sax解析器:

一种解析速度快,占用内存少的xml解析器。

事件驱动,不会把所有文件加载到内存

startDocument()

当遇到文件开头的时候会触发这个方法

startElement(String uri, String localName,

String qName, Attributes attributes)

当读到一个元素节点开始的时候会触发这个方法。

localName:不带前缀的标签名

attributes:带有属性和内容

endElement()

当读到一个元素节点结束的时候会触发这个方法。

characters()

读取到文本节点的时候会触发这个方法

endDocument()

当遇到文件结束的时候会触发这个方法

dom解析器:

一次性读取文件所有内容,性能比较差。适合服务端编程。

数据以树状结构存在。

xmlpull

类似sax(pull不会自动读取完整的文件)

适应嵌入式设备,占用内存少,API比较简单

assets文件夹:

1、assets文件下的文件在打包后会原封不动的保存在apk包里面,不会被编译成二进制。

2、assets文件下的文件不会被映射到R文件,访问的时候需要AssetsManager类

3、aseets文件下可以有目录结构,也就是说在aseets文件下可以再创建新的文件夹

raw

json格式:

相对于xml格式,更节省空间。

json对象:{"key1":value,"key2":value}

1、大括号开始结束{}

2、内容部分每条数据都是以“,”分隔

3、每条数据都是以键值对形式构成的,key必须是字符串;

值可以是:string、double、int、long、boolean,

json对象,json数组。

例如:{"name":"Tom","sex":"man","age":20,"id":"350767678676787"}

注:json是可以嵌套的。

jsonArray

[

{"name":"Tom","sex":"man","age":20,"id":"350767678676787"},

{"name":"Tom","sex":"man","age":20,"id":"350767678676787"}

]

注意:json数据文件要保存成“utf-8 无BOM”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值