ViewHolder的作用 getItemViewType和getViewTypeCount 实现 实现步骤 ---- 1.ListView针对List中每个item, adapter都会调用一个getView...和getViewTypeCount 前一篇中实现了各种样式的Adapter,从简单的单字符类型,到多字符类型,再到有button的类型,当一个listview需要加载各种不同的item时,就需要getItemViewType...和getViewTypeCount这两个BaseAdapter内部方法。...} 和 //获取将由getView为指定项目创建的视图类型。...和getViewTypeCount方法后,getViewTypeCount返回Item的则为我们定义的position,然后在getView可以进行判断 switch (getItemViewType(
大家好,又见面了,我是你们的朋友全栈君。 一. 实现的效果 实例只是简单的显示了两个分组PC和Mobile两个分组 。...用起来是非常简单的。 2. 具体分组的实现 我们先要知道BaseAdapter里面的getItemViewType()函数和getViewTypeCount()函数的作用。...getViewTypeCount表示ListView 每个item会缓存几个复用对象,getItemViewType则是根据position判断这个这个item对应用哪个缓存的对象,换句话说比如getViewTypeCount...内部类Category 这个没什么东西包含一个BaseAdapter对象和一些必要的方法, 因为我们在MobileCategoryAdatper里面肯定是会有List对象的。 2)....然后把title(onTitleClick)和item(onItemClick)的点击的实现都暴露出去。
这两个方法需要注意和setAdapter的调用顺序: When first introduced, this method could only be called before setting the...ListView的getItemViewType 一个页面中当要连续显示多个不同的列表时,或者间隔性地显示多种不同的View时,需要用到ListView的两个方法: @Override public int...getItemViewType(int position) { return super.getItemViewType(position); } @Override public int getViewTypeCount...() { return super.getViewTypeCount(); } getItemViewType方法需要注意的是,其定义的ITEM_XX这样的整数常量,其取值范围需要在0~getViewTypeCount...()-1之间,下面是getItemViewType返回值的描述: An integer representing the type of View.
然后是PinnedSectionListActivity,也是重点 首先定义了一个适配器 /** * 适配器 */ class SimpleAdapter extends ArrayAdapter...COLORS.length])); } return view; } @Override public int getViewTypeCount...() { return 2; } @Override public int getItemViewType(int position...通过设置setVisibility来隐藏和显示 @Override protected void onListItemClick(ListView l, View v, int position...非直辖市再加载一个listview显示 getListView().setVisibility(View.GONE); adapter = new ArrayAdapter
的item 时候,我们需要去复写 两个方法 getItemViewType getViewTypeCount, 着两个方法的的意思是 getViewTypeCount: Returns...public int getViewTypeCount() { return 1; } 另一个方法 getItemViewType Get the type...代码实现 跟单一 item 唯一的区别 就在上述两个方法 和 getview 方法中增加了判断当前类型。... 的item 时候,我们需要去复写 两个方法 getItemViewType getViewTypeCount, 着两个方法的的意思是 getViewTypeCount: Returns...代码实现 跟单一 item 唯一的区别 就在上述两个方法 和 getview 方法中增加了判断当前类型。
base-adapter Android 万能的Adapter for ListView,GridView等,支持多种Item类型的情况。...Adapter继承CommonAdapter,复写convert方法即可。...ViewHolder中封装了大量的常用的方法,比如holder.setText(id,text),holder.setOnClickListener(id,listener)等,可以支持使用。...,根据holder.getLayoutId(),根据不同的layoutId进行相应的控件初始化即可。...= null) 22 return mMultiItemTypeSupport.getViewTypeCount(); 23 return super.getViewTypeCount
二、Adapter的继承关系 有两个adapter的体系 三、Adapter中的方法 在实际应用中,adapter的继承体系应用的更为广泛,所以,要对Adapter的方法有所了解 public interface...ViewGroup parent); // 获得对应位置的这图类型 int getItemViewType(int position); // getView能够返回的View的类型数量...(在HeaderViewListAdapter中能够包括Header和Footer,getView能够返回Header、Footer及Adapter // 中的视图,但其getViewTypeCount...的实现仅仅是调用了内部Adapter的的getViewTypeCount,忽略了Header、Footer中的View // Type,不懂。...int getViewTypeCount(); //是否为空 boolean isEmpty(); }
position)等相关方法正是配合ViewPager来完成 //整个界面里切换Fragment的功能。...它一直保持正在显示的,和左右(如果有)2个Fragment实例。...ListView的getView方法正是我们为ListView提供要显示条目的地方,为了便于为普通的条目对应的view对象添加更多的控制,可以定义ViewHolder来组合View,并负责它的创建和状态控制...为显示的“应用信息”列表条目定义AppInfoViewHolder,它包含一个name和icon,布局文件item_appinfo是简单的ImageView和TextView,其ViewHolder定义如下...ListView的多条目类型复用,主要是getView、getViewTypeCount、getItemViewType和getCount搭配使用。
要想实现这个功能,有两个函数比较重要getItemViewType和getViewTypeCount ? 我先说明一下我的这个demo的功能。...先给出布局main.xml(就一个listview和两个button) 的id存入List data中 public void addImg(int id) { Bitmap bitmap = BitmapFactory...这里尤其要注意,必须+1.具体为什么我也不清楚 @Override public int getViewTypeCount() { return 3; }...Override public View getView(int position, View convertView, ViewGroup parent) { int type = getItemViewType
本文重点介绍后者,也就是多类型item的listview的实现思路和方法,比如实现一个这样的聊天会话页面: 二、实现思路 2.1 第一种思路:用“一种类型”变相实现多种类型 这种思路其实与 ListView...; 和 int getItemViewType(int position); 两个方法。...3 } 4 5 public int getItemViewType(int position) { 6 return 0; 7 } 那我们要做的就是根据实际的数据,对这两个方法进行正确的返回...(); 和 int getItemViewType(int position); 的处理是非常清晰的。...而 getScrapView 方法,其实就是先调用Adapter的 getItemViewType 方法取position对应的view类型,然后从 mScrapViews 中根据类型取view。
使用场景 在重写ListView的BaseAdapter时,我们常常在getView()方法中复用convertView,以提高性能。...convertView在Item为单一的同种类型布局时,能够回收并重用,但是多个Item布局类型不同时,convertView的回收和重用会出现问题。...2.ListView包含不同Item的布局 我们需要做这些工作: 1)重写 getViewTypeCount() – 该方法返回多少个不同的布局 2)重写 getItemViewType...,获得当前所需要的view样式 @Override public int getItemViewType(int position) { // TODO Auto-generated...) return TYPE_3; else return TYPE_1; } @Override public int getViewTypeCount
position的数据的状态,比如指定position的数据可能是组的header;另一个方法就是设置Header View,比如设置Header View的文本,图片等,这个方法是由调用者去实现的。...,只要明白这几个核心的方法,自己写出来,也差不多了。...方法二: 使用不同类型的View:重写getItemViewType(int)和getViewTypeCount()方法。...3、Adapter的实现 这里主要就是说一下getPinnedHeaderState和configurePinnedHeader这两个方法的实现 private class ListViewAdapter...,数据分组请参考: Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音 最后来一张截图:
下面我们列举以下,其他的几个Adapter子类的setAdapter方法。...()方法中的内容和ListView中的内容几乎是一样的,这里先不做分析。...,另外一个Spinner的这个方法的源码,这里就不列出来了。...Galler的setAdapter()方法,查看之下,我们发现Gallery本身并没有setAdapter方法,但是Galler的父类AbsSpinner实现了这个方法, AbsSpinner.setAdapter...具体请看 android 图形系统requestLayout的流程。从这里开始,将重新布局和分配空间。
ListView是我们开发中很重要的控件,在项目中也用的非常多,为了利用ListView展示数据,我们都需要给它新建一个适配器Adapter,一般继承于BaseAdapter,然后重写一些方法,其中最重要的方法是...convertView.getTag(); existingHelper.position = position; return existingHelper; } 目前为止就是ViewHolderHelper的缓存和读取...接下来我们需要添加一些方法来设置View的常用属性。那么我们首先要提供一个findViewById方法。...接下来我们重写ListAdapter的分组方法,毕竟还是有很多时候ListView的cell样式不止一种。...接下来是最重要的getView方法。
BaseAdapter.getView 如果getView方法返回null,那么对应的ListView在显示时就直接触发NullPointerException异常。...如果可以收集到用户是在哪个页面发生崩溃那么问题的定位会准确许多,但是,如果自己的Adapter需要返回好多种View(也就是getViewTypeCount的值,比如一个包含很多不同布局的对话列表),那么你还是需要仔细分析代码来找到具体哪个...解决办法只能从根源上进行: 在我们编写getView方法时,对最终返回的参数自己进行非空判断,当针对不同position处的getItemViewType得到的View对象为null时,可以自己抛出一个...一个Exception,包含position,getItemViewType的数据,方便定位 // 或者生成一个默认的View,提供给用户有用的信息——如果的确不至于让app crash...注意:getView返回null从java语法上是没问题的,虽然根据约定,它返回null肯定会引发空指针异常——但是这是对调用getView的方法而言。
github地址:https://github.com/xiangzhihong/SwipeMenuListView 今天介绍一个SwipeMenuListView实现侧滑删除的例子,其实和listview...的用法一样,就是多了创建删除等view的步骤,然后通过addview添加到父布局中。...当然你也也可以根据自己的需要增加更多的自定义View。 ?...@Override public int getViewTypeCount() { // menu type count return 2...; } @Override public int getItemViewType(int position) { // current
MultiItemTypeAdapter 讲解 讲解 MultiItemTypeAdapter 之前,我们先来看一下相应的接口 ItemViewDelegate 和类 ItemViewDelegateManager...在 delegates 数组中对应的 key,即我们的 viewType public int getItemViewType(T item, int position) {...,并调用 onViewHolderCreated() 方法 第二个方法:createItemView 会根据传递进来的 position 创建相应的 convertView 若 convertView...是在 addAllTypeView 方法中 private void addAllTypeView() { int viewTypeCount = mMultiItemTypeAdapter.getViewTypeCount...mMultiItemTypeAdapter 的相关方法 int itemViewType = mMultiItemTypeAdapter.getItemViewType(mPosition
今天给大家讲的是如何自定义下拉的ListView实现支付宝账单的效果,月份是需要悬浮的,然后没一个月归为一类,先看一个效果图吧。...场景:后台下发的数据就是一个List,考虑到实际情况,还需要做下拉的分页操作,所以,基于上面的情况,我们需要自定义一个可以拦截月份的view。 先定义一个FooterView类。...,我们需要对布局的滑动的数据进行监听,具体请看代码: public class PullStickyListView extends PullFreshListView { public interface...; if (adapter.getViewTypeCount() < 2) throw new IllegalArgumentException(..."Does your adapter handle at least two types" + " of views in getViewTypeCount
分类界面 整个项目的逻辑就是这样的 CategoryInfo public class CategoryInfo { private String title; private String url1...return super.getView(position, convertView, parent); } @Override protected boolean hasMore() { // 当前方法...protected List onload() { return null; } // 集合 管理三个convertView @Override public int getViewTypeCount...() { return super.getViewTypeCount() + 1; // 又额外多了一种条目类型 现在又三种 1 标题 2 内容 3 加载更多(没有显示) } } // 请求服务器...View getView(int position, View convertView, ViewGroup parent) { BaseHolder holder = null; switch (getItemViewType
final boolean isFirstVisibleItemSection = isItemViewTypePinned( adapter, adapter.getItemViewType...(这个函数对应的两个分函数我也在代码里面注释了,这里就不贴出来了) 另外,新建工程来粗略实现一下我刚才的“将这个listview看成一个普通的listview加上一个放在listview头部的textView...Item getItem(int position) { return array.get(position); } @Override public int getItemViewType...(int position) { return getItem(position).getType(); } @Override public int getViewTypeCount...int viewType = adapter.getItemViewType(position); if (viewType == SECTION) {