布局
margin :外边距,子控件与父控件的间距;
padding:内边距,控件与其内容的间距
wegiht:权重,控件占剩余大小的比例
layout_gravity: 控件相对父控件父元素的位置
gravity:控件内容的相对位置
异步任务:AsybcTask
AsyncTask是抽象类.AsyncTask定义了三种泛型类型 Params,Progress和Result。
Params 启动任务执行的输入参数,比如HTTP请求的URL。 一般用String类型;
Progress 后台任务执行的百分比。 一般用Integer类型;
Result 后台执行任务最终返回的结果,一般用byte[]或者String。
(1)定义一个类继承AsyncTask
(2)实现AsyncTask中的方法
1、onPerExecute():该方法将在执行实际的后操作前被UI thread调用,是准备工作方
法,如显示一个进度条,进度的对象在这方法声明和设置。
2、doInBackground(Params...):主要将负责耗时工作,可以在这里调用
publishProgress方法来更新实时的任务进度。
3、onProgressUpdate(Progree...):在publishProgress被调用后,UI thread将调用
这个方法在界面展示进度的情况。
4、onPostExecute(Result...): 在doInBackground执行完成后,被UI thread调用,
后台将结果通过这方法传递给UI thread;
BaseAdapter:
定义一个类继承BaseAdapter实现其抽象方法
getCount:获得列表的数量(长度),可以直接list.length;
getItem:获得列表的某一项,list.get(position);
getItemId:获得列表某一项的id,直接返回参数position就可以了;
getView:获得视图
要处理convertView为空和不为空的两种情况
1、convertView == null
声明一个视图类对象viewHolder = new ViewHolder();
convertView = getLayoutInflater.inflate(....);
.........
convertView.setTag(viewHolder);
2、convertView != null
viewHolder = convertView.getTag();
3、设置控件内容
viewHolder.textView.setText(list.get(position).get("name"));
class ViewHolder:一个视图帮助内部类,声明视图的控件;
例:private ImageView imageViiew;
private TextView textView;
ListView的优化:
1、ListView的布局高度属性设置为非“wrap_content”,如果ListView的布局高度为
“wrap_content”,那么getView()就会重复调用,一个item会被调用4次左右;
2、利用ViewHolder内部类,将item布局文件中需要展示的控件定义为属性,就是把
item中多个控件合为一个整体,可以有效的避免图片错位。
3、convertView:ListView的加载是一个一个item的加载,这样就会每次都inflate一
个item的布局,然后findViewById该布局的所有控件。当数据量大时,是不可想象的
。所以重复利用convertView可以减少填充布局的过程,减少ViewHolder对象实例化的
次数,减少内存的开销,提高性能。