1、为不同的item写不同的布局文件,设置统一的bean类
2、继承BaseAdapter类,实现getItemViewType(int position)和getViewTypeCount() 方法,根据这两个方法,为item设置不同的标记,也就是不同的type
/**
* 根据数据源的position返回需要显示的的layout的type
*
* type的值必须从0开始
*/
@Override
public intgetItemViewType(intposition) {
returnposition ==0?0:1
}
3、在getView方法中,利用getItemViewType(position)方法获取当前的type类型,然后根据不同的type类型,加载不同的item布局文件。
intviewType = getItemViewType(position)
ViewTagHolder mViewTagHolder =null
if(convertView ==null) {
if(viewType ==0) {
convertView =mInflater.inflate(R.layout.layout_hot_search,parent, false)
}else{
convertView =mInflater.inflate(R.layout.adapter_tag_item,parent, false)
mViewTagHolder =newViewTagHolder(convertView)
convertView.setTag(R.string.app_name,mViewTagHolder)
}
}else{
mViewTagHolder = (ViewTagHolder) convertView.getTag(R.string.app_name)
}
4、其他的一些listview的优化同一般的listview没有很大区别。
给Listview里面Item里的每一个控件怎么设定点击事件adpter用的是继承的baseadapter,给整个listview 上的 Item 设置点击事件就用listview.setOnItemClickListener(listener)就可以, 下面介绍 如果 给 I tem里面某一 控件设置点击事件。方法是重写 Adapter。
ListView工作原理(针对下面代码):
1. 给ListView设置数据适配器,此处程序是自己重写的Adapter,创建Adapter 的时候主要做下面的工作:
(1)把ListView需要显示的数据传给Adapter
(2)把ListView显示Item的界面传给Adapter
(3)把上下文对象传给Adapter,主要用来得到LayoutInflater对象来得到Item界面
2. 给ListView设置当点击Item对象的时候执行的 *** 作,此处要实现给Item中的各项也就是该程序的三个TextView设置监听器,也就是调用Adapter中的getView函数。
3. getView函数实现的 *** 作是:第一要将Item要显示的数据显示,然后设置监听器,为监听器设置 *** 作。
定义每一个item的layout的高度。
比如:
在/layout文件中定义row.xml
<?xml version="1.0" encoding="UTF-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="10px"
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</RelativeLayout>
在adapter的getView里面用inflator加载这个layout,就可以达到改变item高度的目的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)