//adapter内部类
private class SearchAdapter extends CursorAdapter { @Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return newAdapterItemView(context, cursor, parent);
} @Override
public void bindView(View view, Context context, Cursor cursor) {
bindAdapterItemView(view, context, cursor);
} public int getSuperCount(){
return super.getCount();
}
public View getSuperView(int position, View convertView, ViewGroup parent){
return super.getView(position, convertView, parent);
}
public int getSuperItemViewType(int position) {
return super.getItemViewType(position);
}
public int getSuperViewTypeCount() {
return super.getViewTypeCount();
}
public long getSuperItemId(int position) {
return super.getItemId(position);
}
@Override
public int getCount() {
return adapterGetCount();
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
return adapterGetView(position, convertView, parent);
} @Override
public int getItemViewType(int position) {
return adapterGetItemViewType(position);
}
@Override
public int getViewTypeCount() {
return adapterGetViewTypeCount();
} @Override
public long getItemId(int position) {
return adapterGetItemId(position);
}
}

外部供重写的方法:

    protected int adapterGetCount(){
return mAdapter.getSuperCount();
}
protected View adapterGetView(int position, View convertView, ViewGroup parent){
return mAdapter.getSuperView(position, convertView, parent);
}
protected int adapterGetItemViewType(int position) {
return mAdapter.getSuperItemViewType(position);
}
protected int adapterGetViewTypeCount() {
return mAdapter.getSuperViewTypeCount();
}
protected long adapterGetItemId(int position) {
return mAdapter.getSuperItemId(position);
}

//子类实现部分:

需要改变的偏移量

 private int getPositionOffset() {
return mDefaultOffset;
}

重写方法:

@Override
protected int adapterGetCount() { return super.adapterGetCount() + getPositionOffset();
} @Override
protected View adapterGetView(int position, View convertView, ViewGroup parent) { if (position < getPositionOffset()) {
int type = mDefaultType[position];
switch (type) {
case ITEM_TYPE_1:
return getView1();
case ITEM_TYPE_2:
return getView2();
case ITEM_TYPE_3:
return getView3();
case ITEM_TYPE_4:
return getView4();
default:
break;
}
}
return super.adapterGetView(position - getBookmarkPositionOffset(), convertView, parent);
}
@Override
protected int adapterGetItemViewType(int position) { if (position < getPositionOffset()) {
return mDefaultType[position];
}
return getItemViewType(position - getPositionOffset());
} @Override
protected int adapterGetViewTypeCount() { return ITEM_TYPE_COUNT + getPositionOffset();
} @Override
public long adapterGetItemId(int position) { if (position < getPositionOffset()) {
int type = mDefaultType[position];
switch (type) {
case ITEM_TYPE_1:
return -1;
case ITEM_TYPE_2:
return -2;
case ITEM_TYPE_3:
return -3;
case ITEM_TYPE_4:
return -4;
default:
break;
}
}
return super.adapterGetItemId(position - getPositionOffset());
} protected static final int ITEM_TYPE_1 = -101;
protected static final int ITEM_TYPE_2 = -102;
protected static final int ITEM_TYPE_3 = -103;
protected static final int ITEM_TYPE_4 = -104; private static int mDefaultOffset;
private static int[] mDefaultType = null;//这个需要初始化,mDefaultOffset是几,这个数组长度就是几,类型一一对应

Android如果动态改变CursorAdapter Item个数的更多相关文章

  1. 【Android多屏适配】动态改变Listview item高度

    在ListView的Adapter中去直接获取传入View的LayoutParams是会报空指针异常的,唯一的方法是在xml中嵌套布局一层LinearLayout <?xml version=& ...

  2. Android中动态改变控件的大小的一种方法

    在Android中有时候我们需要动态改变控件的大小.有几种办法可以实现  一是在onMeasure中修改尺寸,二是在onLayout中修改位置和尺寸.这个是可以进行位置修改的,onMeasure不行. ...

  3. Android 如何动态改变Actionbar上的item图标

    1.Activity菜单机制 (与dialog类似) Activity有一套机制来实现对菜单的管理,方法如下: 1.public boolean onCreateOptionsMenu(Menu me ...

  4. Android ListView动态改变Item高度

    在adapter的getView方法中进行设置,代码如下 @Override public View getView(int position, View convertView, ViewGroup ...

  5. [Android疑难杂症]动态改变Background后Padding无效的问题

    前言 在Layout中指定好background和padding以后,程序里面动态修改background之后padding就失效了,貌似是一个BUG,这里找到了一篇英文文章,简单翻译分享一下. 声明 ...

  6. Android中动态改变Listview中字体的颜色

    效果如下: 账目显示用的是Listview,要实现的功能为使其根据所在Item是“收入”还是“支出”来把数字设置成绿色或红色 方法是自定义适配器,并重写其中getView()函数,实现如下: //自定 ...

  7. Android实现动态改变屏幕方向(Landscape & Portrait)

    1.AndroidManifest.xml: <activity> android:screenOrientation="portrait" ... 2.xx.java ...

  8. Android之动态改变控件大小

    利用getLayoutParams()方法和setLayoutParams()方法.三步曲:1.首先利用getLayoutParams()方法,获取控件的LayoutParams.eg:LayoutP ...

  9. 带你体验Android自定义圆形刻度罗盘 仪表盘 实现指针动态改变

    带你体验Android自定义圆形刻度罗盘 仪表盘 实现指针动态改变 转 https://blog.csdn.net/qq_30993595/article/details/78915115   近期有 ...

随机推荐

  1. wordpress需要FTP用户名密码的问题

    wordpress安装删除插件需要FTP用户名密码的问题 方法一: 服务器命令操作: 1.在wordpress目录下面wp-config.php末尾加入下面代码:  if(is_admin()) {  ...

  2. 九度oj 题目1262:Sequence Construction puzzles(I)_构造全递增序列

    题目描述: 给定一个整数序列,请问如何去掉最少的元素使得原序列变成一个全递增的序列. 输入: 输入的第一行包括一个整数N(1<=N<=10000). 接下来的一行是N个满足题目描述条件的整 ...

  3. 快速排序php

    <?php /** * Created by PhpStorm. * User: brady.wang * Date: 2017/11/10 * Time: 9:45 */ $arr=array ...

  4. [luoguP2862] [USACO06JAN]把牛Corral the Cows(二分 + 乱搞)

    传送门 可以二分边长 然后另开两个数组,把x从小到大排序,把y从小到大排序 枚举x,可以得到正方形的长 枚举y,看看从这个y开始,往上能够到达多少个点,可以用类似队列来搞 其实发现算法的本质之后,x可 ...

  5. [HNOI2002]彩票 (搜索+剪枝)

    题目描述 某地发行一套彩票.彩票上写有1到M这M个自然数.彩民可以在这M个数中任意选取N个不同的数打圈.每个彩民只能买一张彩票,不同的彩民的彩票上的选择不同. 每次抽奖将抽出两个自然数X和Y.如果某人 ...

  6. noip2017爆炸记——题解&总结&反省(普及组+提高组)

    相关链接: noip2018总结 noip2017是我见过的有史以来最坑爹的一场考试了. 今年北京市考点有一个是我们学校,我还恰好被分到了自己学校(还是自己天天上课的那个教室),于是我同时报了普及提高 ...

  7. NCCloud 指令示例

    http://ansrlab.cse.cuhk.edu.hk/software/nccloud/ Implementation of NCCloud in C++ (updated: August 2 ...

  8. 树状数组求第K大(From CLJ)

    ; <<log2[n];p;p>>=) if(a[ret+p]<=kth) kth-=a[ret+=p]; return ret;

  9. 【BZOJ3514】Codechef MARCH14 GERALD07加强版(LCT)

    题意:N个点M条边的无向图,q次询问保留图中编号在[l,r]的边的时候图中的联通块个数. 询问加密,强制在线 n,m,q<=200000 题意:RYZ作业 以下转载自hzwer http://h ...

  10. ZOJ 3811 / 2014 牡丹江赛区网络赛 C. Untrusted Patrol bfs/dfs/并查集

    Untrusted Patrol Time Limit: 3 Seconds                                     Memory Limit: 65536 KB    ...