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,在很大程度上减少了内 ...
随机推荐
- bzoj1087互不侵犯King(状压)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1087 简单的状压dp.但是wa了好几发.注意long long. 注意0和0的连边.而且不能 ...
- BOM的编制与管理
Bill of Material BOM英文全称 Bill of Material,即“物料清单”,也称产品结构表.在制造业管理信息系统中,经常会提到BOM.物料清单是指产品所需零部件明细表及其结构. ...
- Nginx优化指南
大多数的Nginx安装指南告诉你如下基础知识——通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了!而且,在大多数情况下,一个常规安装的nginx对你的网站来说已经能 ...
- Android UI一些技巧
(1)去掉EditText的背景颜色 android:background="@null" (2)ListView 修改某行的值,因为一些功能逻辑,需要修改ListView某行的 ...
- java代码-----------继承练习
总结:父类和子类拥有相同的 方法时,父类的方法被覆盖,子类 package com.sads; class fong { void pprint() { this.print(); this.prin ...
- 安全人员常用的python库
如果你对漏洞挖掘.逆向工程分析或渗透测试感兴趣的话,我第一个要推荐给你的就是Python编程语言.Python不仅语法简单上手容易,而且它还有大量功能强大的库和程序可供我们使用.在这篇文章中,我们会给 ...
- 3D角色渲染到2D界面上
using UnityEngine; using System.Collections; using System.Collections.Generic; using Carrie.Net; usi ...
- POJ1159解题心得
题目:http://poj.org/problem?id=1159 刚开始,从样例的特征去思考.总让我从回文数的角度去思考,想出几个方案,可都用了数据去检验,发现不行.如:ABCDDCB,BACDCA ...
- PyQt5+python+pycharm开发环境配置
Qt Designer的安装方法 使用Qt Designer可以使用GUI的方式快速生成PyQt代码,本文介绍Qt Designer的安装以及在PyCharm中的配置方法. pip install P ...
- 设置itemcontrol的item点击前后不同状态
转自:http://www.cnblogs.com/linzheng/p/3764300.html <Page.Resources> <!--选中数据项的样式--> <D ...