第四章 Android开发组件2
创新互联专注于企业成都全网营销、网站重做改版、宾县网站定制设计、自适应品牌网站建设、H5开发、商城开发、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为宾县等各大城市提供网站开发制作服务。列表类组件
(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); //设置显示的图片
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。