Listview 设置不同类型的item

要想设置不同的item需要在adapter里面重写两个方法

getItemViewType() 需要注意这个个类型是0开始

getViewTypeCount();

  1 package com.example.listview_01;
  2
  3 import java.util.List;
  4
  5 import android.content.Context;
  6 import android.view.LayoutInflater;
  7 import android.view.View;
  8 import android.view.ViewGroup;
  9 import android.widget.BaseAdapter;
 10 import android.widget.TextView;
 11
 12 public class MyAdapter extends BaseAdapter {
 13
 14     private Context context;
 15     private List<ViewItem> list;
 16     private LayoutInflater inflater;
 17
 18     public MyAdapter(Context context, List<ViewItem> list) {
 19         this.context = context;
 20         this.list = list;
 21         inflater = LayoutInflater.from(context);
 22     }
 23
 24     @Override
 25     public int getCount() {
 26         return list.size();
 27     }
 28
 29     @Override
 30     public Object getItem(int position) {
 31         return list.get(position);
 32     }
 33
 34     @Override
 35     public long getItemId(int position) {
 36         return position;
 37     }
 38
 39     @Override
 40     public int getItemViewType(int position) {
 41         return list.get(position).getType();
 42     }
 43
 44     @Override
 45     public int getViewTypeCount() {
 46         return 2;
 47     }
 48
 49     @Override
 50     public View getView(int position, View convertView, ViewGroup parent) {
 51         HolderType1 holderType1 = null;
 52         HolderType2 holderType2 = null;
 53         int type = getItemViewType(position);
 54         if (convertView == null) {
 55             // 根据不同的type设置不同的布局
 56             switch (type) {
 57             case 0:
 58                 convertView = inflater.inflate(R.layout.activity_item, null);
 59                 holderType1 = new HolderType1(convertView);
 60                 convertView.setTag(holderType1);
 61                 break;
 62
 63             case 1:
 64                 convertView = inflater.inflate(R.layout.activity_item2, null);
 65                 holderType2 = new HolderType2(convertView);
 66                 convertView.setTag(holderType2);
 67                 break;
 68             }
 69         } else {
 70             // 根据不同的布局设置不同的holder
 71             switch (type) {
 72             case 0:
 73                 holderType1 = (HolderType1) convertView.getTag();
 74                 break;
 75             case 1:
 76                 holderType2 = (HolderType2) convertView.getTag();
 77                 break;
 78             }
 79         }
 80
 81         ViewItem item = list.get(position);
 82         // 根据不同的布局给控件填充数据
 83         switch (type) {
 84         case 0:
 85             holderType1.addressTxt.setText(item.getAddress());
 86             holderType1.nameTxt.setText(item.getName());
 87             holderType1.ageTxt.setText(item.getAge());
 88             break;
 89         case 1:
 90             holderType2.titleTxt.setText(item.getTitle());
 91             break;
 92         }
 93         return convertView;
 94     }
 95
 96     private class HolderType1 {
 97         public TextView nameTxt;
 98         public TextView ageTxt;
 99         public TextView addressTxt;
100
101         public HolderType1(View convertView) {
102             nameTxt = (TextView) convertView.findViewById(R.id.name);
103             ageTxt = (TextView) convertView.findViewById(R.id.age);
104             addressTxt = (TextView) convertView.findViewById(R.id.address);
105         }
106     }
107
108     private class HolderType2 {
109         public TextView titleTxt;
110
111         public HolderType2(View convertView) {
112             titleTxt = (TextView) convertView.findViewById(R.id.title);
113         }
114     }
115
116 }

时间: 2024-08-29 21:52:43

Listview 设置不同类型的item的相关文章

ListView显示多种类型的item

ListView可以显示多种类型的条目布局,这里写显示两种布局的情况,其他类似 这是MainActivity:,MainActivity的布局就是一个ListView public class MainActivity extends Activity { private ListView lv; private List<People> lists; @Override protected void onCreate(Bundle savedInstanceState) { super.on

ListView设置某一项item的文本居中

使用ListView和volley写了一个使用网络获取天气的demo ListView中Item的文本模式都是左侧对齐 我这边需要一些标题文本居中对齐 网上也找不到示例,不过找到了getView这个函数 于是自己摸索出了代码: 方式就是在adapter的getView中判断是否含有指定的item,如果有那么就设置这个item的文本居中: 1 this.adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_ite

listview当选中某一个item时设置背景色其他的不变

listview当选中某一个item时设置背景色其他的不变: 可以使用listview.setOnFoucsChangeListener(listener) ; /** * listview获得焦点和失去焦点时背景颜色的变化 * @author long * */ private class MyOnFocusChangeListener implements OnFocusChangeListener{ @Override public void onFocusChange(View v, b

Listview实现不同类型的布局

打开各种客户端发现 Listview的布局多种多样,在我以前的认知中listview不是只能放一种item布局嘛,我就震惊了,现在我自己的项目上要用到这种方式那么就去做下 原理是listview 的adapter中 有这两个方法 // 返回当前布局的样式type @Override public int getItemViewType(int position) { return listDatas.get(position).type; } // 返回你有多少个不同的类型的数量 @Overri

ListView显示不同样式的item

先look图 我们再使用listview时,listview的item大多时候都是一种样式,在很多app中也很常见,但有时候根据需求,可能数据的数量不一样,同个类型的数据显示的位置不同,亦或者有的item需要图片,有的不需要,但是这些又必须在同一个listview中显示,这时我们就需要在listview中显示多种样式的item,首先我们需要考虑的是如何将不同数量的数据装载到ArrayList<~>中呢,先看看下面的listViewItem,. 1 package com.example.ker

安卓Listview 不规则项即不同item的运行

在安卓中,listview  的item 是一个不断被轮询调换位置的过程,这样 即 图片参考地址   http://www.cnblogs.com/mybkn/archive/2012/05/23/2514681.html   谢谢. 开发中 ,我们经藏会遇到listview  的每一项都不同的需求.   这个时候如果使用 以前自定义的BaseAdapter的方法的话 .在滚动的时候就会出现item布局错乱的情况,也就是说 第一项在最初的背景是红色的xml布局, 当滚动到第二项置顶,在回到顶部的

ListView设置快速滑动时不加载图片

设置ListView 快速滑动不加载要设置滑动监听OnScrollListener, 当快速滑动是设置标志位不请求网络 这个也属于listview优化的一步 设置监听器 1 package com.example.listview_01; 2 3 import android.widget.AbsListView; 4 import android.widget.BaseAdapter; 5 import android.widget.AbsListView.OnScrollListener;

[转][Android] ListView中getView的原理+如何在ListView中放置多个item

ListView 和 Adapter 的基础 工作原理: ListView 针对List中每个item,要求 adapter “给我一个视图” (getView). 一个新的视图被返回并显示 如果我们有上亿个项目要显示怎么办?为每个项目创建一个新视图?NO!这不可能! 实际上Android为你缓存了视图. Android中有个叫做Recycler的构件,下图是他的工作原理: 如果你有10亿个项目(item),其中只有可见的项目存在内存中,其他的在Recycler中. ListView先请求一个t

Android之ListView设置

Android开发中,我们常使用到ListView视图,下面介绍ListView的几种使用方法. 主界面 首先,在主界面上添加几个按钮,用于界面跳转. 界面布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="mat