Listview getItemViewType的使用
ListView中有两个可以用来让ListView可以在视图中显示多种布局的方法,分别是getItemType和getViewTypeCount
其中
getItemViewType返回的是有参数position所决定的的view的id
getViewTypeCount,顾名思义,就是返回不同布局的数目
接下来我们要做的就是在getView方法中根据不同的itemType来创建正确的convertView
话不多说,先上图

主要代码:
Activity
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
ListView listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(new MySeparatorListAdapter(initData()));
}
private List<ListData> initData() {
List<ListData> data = new ArrayList<MainActivity.ListData>();
for(int i = 0; i < 30; i ++)
data.add(new ListData("标题:" + i, "内容:" + i, "作者:" + i));
return data;
}
}
Adapter类
class MySeparatorListAdapter extends BaseAdapter {
private static final int TYPE_MAIN = 0;
private static final int TYPE_SEPARATOR = 1;
private static final int TYPE_COUNT = 2;
private List<ListData> mData;
private LayoutInflater mInflater;
private TreeSet mSeparatorsSet = new TreeSet();
public MySeparatorListAdapter(List<ListData> data) {
mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mData = data;
setSeparator();
}
@SuppressWarnings("unchecked")
private void setSeparator() {
int index = 0;
for(int i = 0, n = mData.size(); i < n; i ++) {
if(i % 3 == 0) {
//保存分界位置信息
mSeparatorsSet.add(i + index);
mData.add(i + index, new ListData("分界" + index, null, null));
index ++;
}
}
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
return mSeparatorsSet.contains(position) ? TYPE_SEPARATOR : TYPE_MAIN;
}
@Override
public int getViewTypeCount() {
return TYPE_COUNT;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public ListData getItem(int position) {
return mData.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
int type = getItemViewType(position);
if (convertView == null) {
holder = new ViewHolder();
switch (type) {
case TYPE_MAIN:
convertView = mInflater.inflate(R.layout.music_hot_review_item, null);
holder.titleView = (TextView)convertView.findViewById(R.id.music_hot_review_musicname);
holder.contentView = (TextView)convertView.findViewById(R.id.music_hot_review_review);
holder.authorView = (TextView)convertView.findViewById(R.id.music_hot_review_username);
break;
case TYPE_SEPARATOR:
convertView = mInflater.inflate(R.layout.separator_item, null);
holder.titleView = (TextView)convertView.findViewById(R.id.separetor_title);
break;
}
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
switch (type) {
case TYPE_MAIN:
holder.titleView.setText(mData.get(position).getTitle().toString());
holder.contentView.setText(mData.get(position).getContent().toString());
holder.authorView.setText(mData.get(position).getAuthor().toString());
break;
case TYPE_SEPARATOR:
holder.titleView.setText(mData.get(position).getTitle().toString());
break;
}
return convertView;
}
}
xml代码:
主要布局:music_hot_review_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/list_rect_selector"
android:orientation="vertical" > <RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent" > <ImageView
android:id="@+id/music_hot_review_imageview"
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:scaleType="centerCrop"
android:src="@drawable/music_image_default" /> <TextView
android:id="@+id/music_hot_review_musicname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:layout_toRightOf="@id/music_hot_review_imageview"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:text="我好想你"
android:textColor="@color/font_color"
android:textSize="18sp" /> <TextView
android:id="@+id/music_hot_review_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/music_hot_review_musicname"
android:layout_marginLeft="13dp"
android:layout_marginTop="2dp"
android:layout_toRightOf="@id/music_hot_review_imageview"
android:text="居来提"
android:textColor="@color/font_color"
android:textSize="16sp" /> <TextView
android:id="@+id/music_hot_review_review"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/music_hot_review_username"
android:layout_marginLeft="13dp"
android:layout_marginRight="5dp"
android:layout_marginTop="2dp"
android:layout_toRightOf="@id/music_hot_review_imageview"
android:paddingBottom="10dp"
android:text="dsahdkasdh"
android:textColor="@color/font_color"
android:textSize="15sp" />
</RelativeLayout> </LinearLayout>
分界布局: separator_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp" > <TextView
android:id="@+id/separetor_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:textSize="20sp"
android:textColor="@color/my_green"
android:text="分界"
/> </RelativeLayout>
本文内容参考:http://www.cnblogs.com/xiaowenji/archive/2010/12/08/1900579.html
Listview getItemViewType的使用的更多相关文章
- Android之ListView的getItemViewType和getViewTypeCount
PS:感觉这两个方法其实还是很容易理解的,也算是给我其他两个朋友写的吧,帮他们搞清楚这两个方法的用法和概念.同时还有一些小细节问题需要注意. 学习内容: 1.getItemViewType和getVi ...
- android listview getviewtypecount和getItemViewType
package newdemo.jeno.listviewdemo; import android.app.Activity;import android.os.Bundle;import andro ...
- ListView getView中放置多个item和getItemViewType的用法
ListView 和 Adapter 的基础 工作原理: ListView 针对List中每个item,要求 adapter “给我一个视图” (getView). 一个新的视图被返回并显示 如果我们 ...
- Android ListView Adapter的getItemViewType和getViewTypeCount多种布局
<Android ListView Adapter的getItemViewType和getViewTypeCount多种布局> 在Android的ListView中.假设在一个Lis ...
- listview下拉刷新和上拉加载更多的多种实现方案
listview经常结合下来刷新和上拉加载更多使用,本文总结了三种常用到的方案分别作出说明. 方案一:添加头布局和脚布局 android系统为listview提供了addfootview ...
- 【腾讯Bugly干货分享】跨平台 ListView 性能优化
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/FbiSLPxFdGqJ00WgpJ94yw 导语 精 ...
- Android关于listView的BaseAdapter以及getView的三级优化
1.4个重写方法的含义 自定义Adapter继承自BaseAdapter(通用适配器) getCount(); getItem(); getItemId(); getViewTypaCount() ...
- ListView之多种类型Item
一.概述 一般而言,listview每个item的样式是一样的,但也有很多应用场景下不同位置的item需要不同的样式. 拿微信举例,前者的代表作是消息列表,而后者的典型则是聊天会话界面. 本文重点介绍 ...
- Android之ListView性能优化——使用ConvertView和ViewHolder
使用ConvertView和ViewHolder的优化是针对ListView的Adapter(BaseAdapter)的.这种优化的优点如下: 1)重用了ConveertView,在很大程度上减少了内 ...
随机推荐
- C#软件安全 反编译 加密与安全等等
我最近开发了一些C#语言的软件,但是由于这是一种解释型语言,也就是会转化成中间件语言,很容易就被反编译解密,包括exe和dll库等等,这时候我们真的需要使用一些技巧来将自己的成果进行加密,加壳等办法. ...
- 安装sphinx报错(undefined reference to `libiconv_open' 、undefined reference to `libiconv'、undefined reference to `libiconv_close'、make[1]: *** No rule to make target `all'. Stop. 、make: *** [all-recursive
(为知笔记copy过来格式有变,希望对遇到此问题的童鞋有帮助) 具体错误: Thank you for choosing Sphinx! [root@vm-vagrant csft-4.1]# mak ...
- HttpClient使用示例
1)使用HttpClient发送GET请求 public class MainActivity extends Activity implements OnClickListener { privat ...
- Java经典练习题_Day05
一. 选择题 1.下列各项中的各项定义正确的是:(ACD) A. public static void m(){} B. public void static m(){} C. public ...
- cookie跨域问题汇总
一.通过nginx反向代理 通过nginx反向代理后,使得浏览器认为访问的资源都是属于相同协议,域名和端口的. 详细见:<nginx实现跨域访问> 二.jsonp方式请求 v jquery ...
- 20181110_wait和async
一. Awit和async的由来: await/async本身是一个语法糖,编译器提供的一个简化编程的功能; 在C#升级和.net Framework升级的时候, 产生的, 所以说并不是CLR的产物 ...
- da分布式算法
参考学习<数字信号处理的FPGA实现> 思想如图: 在下半部分可以看到:是将N阶的数B bit,一位一位的移入LUT然后经过累加器.其中N个数需要2.^N次方长度的LUT,B bit表示需 ...
- zoj-3433-Gu Jian Qi Tan
/* Gu Jian Qi Tan -------------------------------------------------------------------------------- T ...
- 在线pubmed
ESearch(文本搜索) eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi http://eutils.ncbi.nlm.nih.gov/entr ...
- public interface Sampler extends Serializable, TestElement
在看jmeter源码时看到的,当时就傻了,不能啊,java中只能是单继承啊,呃,其实是类只能是单继承,而接口可以多继承,不要以为extends后边跟的都是类 Serializable, TestEle ...