第四章 Android开发组件2

列表类组件

(1)ListView组件:以垂直列表的形式列出需要显示的列表项

相关属性:

a. android:divider 用于为列表视图设置分隔条,可以用颜色或者图片资源

b. android:dividerHeight 设置分隔条的高度

c. android:entries 通过数组资源为ListView指定列表项

d. android:footerDividersEnabled 设置是否在footerView之前绘制分隔条,默认为true。

e. android:headerDividersEnabled 设置是否在headerView之后绘制分隔条,默认为true。

(2)ListView使用步骤:

a. 拖入一个ListView控件,高度改为match_parent

b. 新建一个布局xml文件,设定每行显示的样式

c. 创建一个类MyAdapter继承BaseAdapter

getView()方法:设置每行数据显示及每行显示样式

getCount()方法:显示的行数,当返回值为0时,getView()方法不会被调用,显示为空白

d. 创建适配器对象

MyAdapter adapter = new MyAdapter();

e. 为ListView设置适配器

listView.setAdapter(adapter);

f. 添加headview和footview(必须在设置适配器之前)

View headview = getLayoutInflater.inflate(R.layout.head,null);

View footview = getLayoutInflater.inflate(R.layout.foot,null);

listView.addHeadView(headview);

listView.addFootView(footview);

(3)ListView的优化

上下滑动会不断触发getview()方法

解决方法:复用行布局,减少控件查找

//创建一个类,声明几个变量(变量类型和数量与布局xml文件中包含的控件一致)

class ViewHolder{

View view1;

View view2;

......

}

//声明成员变量

View inflate;

ViewHolder holder;

//优化

if(convertView==null){

//创建一个ViewHolder对象

//得到布局转换器对象

LayoutInflater inflater = getLayoutInflate();

//将布局xml文件转换为布局对象

inflate = inflater.inflate(R.layout.listItem,null);

//查找控件

holder.view1 = inflate.findViewById(R.id.view1);

holder.view2 = inflate.findViewById(R.id.view2);

//设置一个标签

infalte.setTag(holder);

}else{

//替换、复用行布局

inflate=convertView;

holder = (ViewHolder)inflate.getTag();

}

//依据控件类型设置控件内容

......

(3)数据更新

数据发生变化时,由适配器通知listview更新数据

adapter.notifyDataSetChanged();

(4)ListView的点击事件

a. 设置点击监听

listview.setOnItemClickListener(new OnItemClickListener){

@Override

public void onItemClick(AdapterView<?> parent,View view,int position,long id){

......

}

}

备注:当行布局中存在抢占焦点的控件时(如Button),ListView的点击会失效

解决方式:

在行布局中抢占焦点的控件上设置属性:android:focusable = "false"

在行布局中设置让所有能抢占焦点的控件都不抢占焦点

android:descendantFocusability = "blocksDescendants"

b. 设置长按点击监听

listview.setOnItemLongClickListener(new OnItemLongClickListener){

@Override

public void OnItemLongClick(AdapterView<?> parent,View view,int position,long id){

......

}

}

Spinner组件:列表选择框相当于网页中的常见的下拉列表框

getSelectedItem():获取列表选择框的选中值

OnItemSelectedListener:设置列表项的选中事件监听。

setDropDownViewResource():为适配器设置列表框下拉时的选项样式

Gallery组件:画廊视图,可按水平方向显示内容,并可用手指直接拖动图片移动,一般用来浏览 图片。通常用BaseAAdapter适配器为Grallery组件提供要显示的图片。

ImageSwitcher组件:图片切换器,用于实现类似于Windows下“Windows照片查看器”中的“上一 张”、“下一张”的功能。使用ImageSwitcher必须实现 ViewSwitcher.ViewFactory接口,通过makeView()方法创建用于显示图片的 ImageView对象。例如:

p_w_picpathSwitcher.setInAnimation(xxx);//设置淡入动画

p_w_picpathSwitcher.setOutAnimation(xxx);//设置淡出动画

p_w_picpathSwitcher.setFactory(new ViewFactoty(){

@Override

public View makeView(){

ImageView p_w_picpathView = new ImageView(MainActivity.this);

return p_w_picpathView;

}

});

p_w_picpathSwitcher.setImageResource(xxx); //设置显示的图片