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

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<xxx,xxx,xxx>

三个泛型参数: 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”


更多相关文章

  1. Android优化——UI检视利器:Hierarchy Viewer
  2. Android(安卓)8.0 EditText 焦点无法移动到其他控件
  3. 在Eclipse下编译Android原生APK方法
  4. 实现静默安装和卸载应用
  5. H5与android原生的JS交互
  6. Android兼容库
  7. Android中的对象序列化方法
  8. android view类分析
  9. Android监听手机电话状态与发送邮件通知来电号码的方法(基于Phon

随机推荐

  1. android 读取指定路径数据库文件
  2. Android(安卓)transformClassesWithDexFo
  3. Android(安卓)之安装APK
  4. 【问题】Android(安卓)Studio3.1.2 Rejec
  5. Android(安卓)TV开发中所有的遥控器按键
  6. Android(安卓)Jetpack Components of Vie
  7. android Gallery3D效果
  8. Getting Smack working with Android(安
  9. Android(安卓)坐标
  10. Android网格布局实现--recyclerview