MainActivity如下:

package cc.testlistview;
import java.util.ArrayList;
import java.util.HashMap;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.app.Activity;
/**
* Demo描述:
* 为ListView的Item设置不同的布局.
* 例如在该例子中ListView的第一个Item显示一张
* 图片,其余的Item都显示文字.
*
* 为了达到此目的需要重写BaseAdapter中的
* 1 getViewTypeCount()和getItemViewType(int position)方法.
* 1.1在getViewTypeCount中指定一共有几种不同的item
* 在此返回2即可.
* 1.2在getItemViewType(int position)中需要依据position的不同
* 返回不同的Type.
* 2 在getView()方法中针对不同的Type为Item设置布局
* 2.1得到当前位置(position)时的Type即代码:
* currentType= getItemViewType(position);
* 2.2依据Type的不同为Item设置布局
*
* 参考资料:
* 1 http://blog.csdn.net/yueyue369/article/details/6115552
* 2 http://blog.sina.com.cn/s/blog_5da93c8f0100wx4v.html
* Thank you very much
*/
public class MainActivity extends Activity {
private ListView mListView;
private HashMap<String, Object> mHashMap;
private ArrayList<HashMap<String, Object>> mArrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
private void init(){
mArrayList=new ArrayList<HashMap<String,Object>>();
mListView=(ListView) findViewById(R.id.listview);
addDataForListView();
mListView.setAdapter
(new ListViewAdapter(MainActivity.this, mArrayList, R.layout.othersitem, new String []{"content"}, new int []{R.id.textView}));
mListView.setOnItemClickListener(new ItemClickListenerImpl());
}
private void addDataForListView(){
for (int i = 0; i < 30; i++) {
mHashMap=new HashMap<String, Object>();
mHashMap.put("content", "This is ---> "+i);
mArrayList.add(mHashMap);
}
} private class ItemClickListenerImpl implements OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,long arg) {
System.out.println("OnItemClickListener position="+position); }
}
}

ListViewAdapter如下:

package cc.testlistview;
import java.util.List;
import java.util.Map;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView; public class ListViewAdapter extends BaseAdapter {
private List<? extends Map<String, ?>> mArrayList;
private int resource;
private LayoutInflater mLayoutInflater; private final int TYPE_COUNT=2;
private final int FIRST_TYPE=0;
private final int OTHERS_TYPE=1;
private int currentType;
public ListViewAdapter(Context context,List<? extends Map<String, ?>> data, int resource, String[] from,int[] to) {
this.mArrayList=data;
this.resource=resource;
mLayoutInflater=(LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
} @Override
public int getCount() {
if (mArrayList==null) {
return 0;
} else {
return (mArrayList.size()+1);
} } @Override
public Object getItem(int position) {
if (mArrayList==null) {
return null;
} else {
if (position>0) {
return mArrayList.get(position-1);
} else {
return mArrayList.get(position+1);
}
}
} @Override
public long getItemId(int position) {
return position;
} ///////////////////////////////////////////////////////
@Override
public int getViewTypeCount() {
return TYPE_COUNT;
} @Override
public int getItemViewType(int position) {
if (position==0) {
return FIRST_TYPE;
} else {
return OTHERS_TYPE;
}
}
/////////////////////////////////////////////////////// @Override
public View getView(int position, View convertView, ViewGroup parent) {
View firstItemView = null;
View othersItemView=null;
//获取到当前位置所对应的Type
currentType= getItemViewType(position);
System.out.println("type="+currentType);
if (currentType== FIRST_TYPE) {
firstItemView = convertView;
FirstItemViewHolder firstItemViewHolder=null;
if (firstItemView==null) {
System.out.println("firstItemView==null ");
firstItemView = mLayoutInflater.inflate(R.layout.firstitem,null);
firstItemView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
System.out.println("=====click first item=======");
}
});
firstItemViewHolder=new FirstItemViewHolder();
firstItemViewHolder.imageView=(ImageView) firstItemView.findViewById(R.id.imageView);
firstItemView.setTag(firstItemViewHolder); } else {
System.out.println("firstItemView!=null ");
System.out.println("111 getClass="+firstItemView.getTag().getClass().toString());
firstItemViewHolder=(FirstItemViewHolder) firstItemView.getTag();
} if (firstItemViewHolder.imageView!=null) {
firstItemViewHolder.imageView.setImageResource(R.drawable.ic_launcher);
} convertView=firstItemView; } else {
othersItemView = convertView;
OthersViewHolder othersViewHolder=null;
if (othersItemView==null) {
System.out.println("othersItemView==null ");
othersItemView = mLayoutInflater.inflate(R.layout.othersitem,null);
othersViewHolder=new OthersViewHolder();
othersViewHolder.textView=(TextView) othersItemView.findViewById(R.id.textView);
othersItemView.setTag(othersViewHolder);
} else {
System.out.println("othersItemView!=null ");
System.out.println("222 getClass="+othersItemView.getTag().getClass().toString());
othersViewHolder=(OthersViewHolder) othersItemView.getTag();
} if (mArrayList!=null) {
if (othersViewHolder.textView!=null) {
othersViewHolder.textView.setText((String)(mArrayList.get(position-1).get("content")));
} } convertView=othersItemView; } return convertView;
} //第一个Item的ViewHolder
private class FirstItemViewHolder{
ImageView imageView;
} //除第一个Item以外其余Item的ViewHolder
private class OthersViewHolder{
TextView textView;
}
}

Android为ListView的Item设置不同的布局的更多相关文章

  1. Android 实现ListView中Item被单击后背景色保持高亮

    今天为了解决一个需求,就是我有一个slidingDrawer,里面是一个ListView.然后,单击其中的Item,默认只是显示一个橙色背景后就恢复了.客户便有着个需求,需要单击这个Item的背景高亮 ...

  2. android中listview的item滑动删除效果(已解决listview点击问题)

    领导看到iphone上tableview有个滑动删除的效果,要求在android上也实现,搜了下资料,实现起来比较简单,可弄到后面,居然不能点击了,把一篇文章中的代码修改了一下,捣鼓了一番,搞定,下面 ...

  3. Android自定义ListView的Item无法响应OnItemClick的解决办法

     转: 如果你的自定义ListViewItem中有Button或者Checkable的子类控件的话,那么默认focus是交给了子控件,而ListView的Item能被选中的基础是它能获取Focus,也 ...

  4. Android自定义ListView的Item无法响应OnItemClick的解决办法(转)

    原文链接:http://www.linuxidc.com/Linux/2011-09/43205.htm 如果你的自定义ListViewItem中有Button或者Checkable的子类控件的话,那 ...

  5. android 在 ListView 的 item 中插入 GridView 仿微信朋友圈图片显示。

    转载请声明出处(http://www.cnblogs.com/linguanh/) 先上张效果图: 1,思路简述 这个肯定是要重写 baseAdapter的了,这里我分了两个数据适配器,一个是自定义的 ...

  6. Android学习---ListView和Inflater的使用,将一个布局文件转化为一个对象

    本文将介绍ListView和Inflater的使用,将接上一篇文章内容. 一.什么是ListView? 在android开发中ListView是比较常用的控件,ListView 控件可使用四种不同视图 ...

  7. Android开发-Listview中显示不同的视图布局

    1. 使用场景 在重写ListView的BaseAdapter时,我们常常在getView()方法中复用convertView,以提高性能.convertView在Item为单一的同种类型布局时,能够 ...

  8. Android给listview的item设定高度

    在item的layout文件中,用android:layout_height设置item的高度.运行,高度设置无效. 解决办法: 给item设定minHeight,即可. -------------- ...

  9. Android关于ListView中item与控件抢夺焦点的那些事

    在开发中,listview可以说是我们使用最频繁的控件之一了,但是关于listview的各种问题也是很多.当我们使用自定义布局的Listview的时候,如果在item的布局文件里面存在Button或者 ...

随机推荐

  1. 封装cookie组件

    var Cookie = { // 读取 get: function(name){ var cookieStr = "; "+document.cookie+"; &qu ...

  2. HTML5 Canvas画数字时钟

    先不说废话,没代码算个蛋. 一些地方注释都写得比较清楚,不过这只是部分,因为只有秒针,但是时针,分针的逻辑都是一致的. 代码中有些坐标不知道为什么较不准,看看就好

  3. JQUERY1.9学习笔记 之可见性过滤器(一) 隐藏选择器

    描述:选择所有隐藏的元素. jQuery( ":hidden" ) 例:显示出所有隐藏的div元素,并对隐藏的input元素计数. <!doctype html>< ...

  4. 知识备忘phpcms 简单解析一 数据表字段

    PHPCMS V9帮助中心 数据结构 phpcms v9 数据... phpcms v9 数据... PHPSSO 数据库结... phpcms v9 数据表结构 在线版 PHPCMS V9 数据结构 ...

  5. 解决xp共享的批处理文件

    在空白地方点右键选择新建一个文本文档,将默认的“新建 文本文档.txt”文件名改名为以下红色加粗字体内容,再复制红色内容以下的黑字部分到改名后的文档.其他文件生成的方法相同.完成后根据需要双击CMD扩 ...

  6. KVO初探

    一,概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知.简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应 ...

  7. 串行CPU设计

    一.概述 串行CPU工作流程 串行CPU的时序流程如下图所示:取指.译码.执行.回写. 其中,取指.回写是与存储器打交道:而译码与执行则是CPU内部自个儿的操作. 我们究竟想要CPU干什么?     ...

  8. 在iOS7中修改状态栏字体的颜色-b

    状态栏的字体为黑色: UIStatusBarStyleDefault 状态栏的字体为白色: UIStatusBarStyleLightContent 一.在 info.plist  中,将 View ...

  9. start-tomcat7.launch

    <?xml version="1.0" encoding="UTF-8" standalone="no"?> <launc ...

  10. 【Java】Java Servlet 技术简介

    Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么,它们是如何工作的,如何使用它们来创 ...