1. //adapter内部类
    private class SearchAdapter extends CursorAdapter {
  2.  
  3. @Override
  4. public View newView(Context context, Cursor cursor, ViewGroup parent) {
  5. return newAdapterItemView(context, cursor, parent);
  6. }
  7.  
  8. @Override
  9. public void bindView(View view, Context context, Cursor cursor) {
  10. bindAdapterItemView(view, context, cursor);
  11. }
  12.  
  13. public int getSuperCount(){
  14. return super.getCount();
  15. }
  16. public View getSuperView(int position, View convertView, ViewGroup parent){
  17. return super.getView(position, convertView, parent);
  18. }
  19. public int getSuperItemViewType(int position) {
  20. return super.getItemViewType(position);
  21. }
  22. public int getSuperViewTypeCount() {
  23. return super.getViewTypeCount();
  24. }
  25. public long getSuperItemId(int position) {
  26. return super.getItemId(position);
  27. }
  28. @Override
  29. public int getCount() {
  30. return adapterGetCount();
  31. }
  32.  
  33. @Override
  34. public View getView(int position, View convertView, ViewGroup parent) {
  35. return adapterGetView(position, convertView, parent);
  36. }
  37.  
  38. @Override
  39. public int getItemViewType(int position) {
  40. return adapterGetItemViewType(position);
  41. }
  42. @Override
  43. public int getViewTypeCount() {
  44. return adapterGetViewTypeCount();
  45. }
  46.  
  47. @Override
  48. public long getItemId(int position) {
  49. return adapterGetItemId(position);
  50. }
  51. }

外部供重写的方法:

  1. protected int adapterGetCount(){
  2. return mAdapter.getSuperCount();
  3. }
  4. protected View adapterGetView(int position, View convertView, ViewGroup parent){
  5. return mAdapter.getSuperView(position, convertView, parent);
  6. }
  7. protected int adapterGetItemViewType(int position) {
  8. return mAdapter.getSuperItemViewType(position);
  9. }
  10. protected int adapterGetViewTypeCount() {
  11. return mAdapter.getSuperViewTypeCount();
  12. }
  13. protected long adapterGetItemId(int position) {
  14. return mAdapter.getSuperItemId(position);
  15. }

//子类实现部分:

需要改变的偏移量

  1. private int getPositionOffset() {
  2. return mDefaultOffset;
  3. }

重写方法:

  1. @Override
  2. protected int adapterGetCount() {
  3.  
  4. return super.adapterGetCount() + getPositionOffset();
  5. }
  6.  
  7. @Override
  8. protected View adapterGetView(int position, View convertView, ViewGroup parent) {
  9.  
  10. if (position < getPositionOffset()) {
  11. int type = mDefaultType[position];
  12. switch (type) {
  13. case ITEM_TYPE_1:
  14. return getView1();
  15. case ITEM_TYPE_2:
  16. return getView2();
  17. case ITEM_TYPE_3:
  18. return getView3();
  19. case ITEM_TYPE_4:
  20. return getView4();
  21. default:
  22. break;
  23. }
  24. }
  25. return super.adapterGetView(position - getBookmarkPositionOffset(), convertView, parent);
  26. }
  27. @Override
  28. protected int adapterGetItemViewType(int position) {
  29.  
  30. if (position < getPositionOffset()) {
  31. return mDefaultType[position];
  32. }
  33. return getItemViewType(position - getPositionOffset());
  34. }
  35.  
  36. @Override
  37. protected int adapterGetViewTypeCount() {
  38.  
  39. return ITEM_TYPE_COUNT + getPositionOffset();
  40. }
  41.  
  42. @Override
  43. public long adapterGetItemId(int position) {
  44.  
  45. if (position < getPositionOffset()) {
  46. int type = mDefaultType[position];
  47. switch (type) {
  48. case ITEM_TYPE_1:
  49. return -1;
  50. case ITEM_TYPE_2:
  51. return -2;
  52. case ITEM_TYPE_3:
  53. return -3;
  54. case ITEM_TYPE_4:
  55. return -4;
  56. default:
  57. break;
  58. }
  59. }
  60. return super.adapterGetItemId(position - getPositionOffset());
  61. }
  62.  
  63. protected static final int ITEM_TYPE_1 = -101;
  64. protected static final int ITEM_TYPE_2 = -102;
  65. protected static final int ITEM_TYPE_3 = -103;
  66. protected static final int ITEM_TYPE_4 = -104;
  67.  
  68. private static int mDefaultOffset;
  69. private static int[] mDefaultType = null;//这个需要初始化,mDefaultOffset是几,这个数组长度就是几,类型一一对应
  1.  

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. liunx 根目录介绍

    1. /bin binary二进制 存放系统许多可执行程序文件 执行的相关指令,例如ls pwd whoami,后台的支持文件目录 2. /sbin super binary超级的二进制 存放系统许多 ...

  2. NYOJ 118 修路方案

    修路方案 时间限制:3000 ms  |  内存限制:65535 KB 难度:5   描述 南将军率领着许多部队,它们分别驻扎在N个不同的城市里,这些城市分别编号1~N,由于交通不太便利,南将军准备修 ...

  3. NYOJ 1023 还是回文

    还是回文 时间限制:2000 ms  |  内存限制:65535 KB 难度:3   描述 判断回文串很简单,把字符串变成回文串也不难.现在我们增加点难度,给出一串字符(全部是小写字母),添加或删除一 ...

  4. hiho week 143

    P1 : hiho密码 Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB Description 小Ho根据最近在密码学课上学习 ...

  5. hdu2043

    #include <stdio.h> #include <string.h> char sign[]={'A','B','C','D','E','F','G','H','I', ...

  6. hdu 1536 sg (dfs实现)

    S-Nim Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  7. PTA 10-排序5 PAT Judge (25分)

    题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/677 5-15 PAT Judge   (25分) The ranklist of PA ...

  8. 自动化运维之shell通配符,转义符,和元字符(二)

    1 shell通配符 通配符看起来有点象正则表达式语句,但是它与正则表达式不同的,不能相互混淆.把通配符理解为shell特殊代号字符就可. 二.shell元字符 shell除了有通配符之外,由shel ...

  9. [BZOJ2733] [HNOI2012]永无乡(并查集 + 线段树合并)

    传送门 一看到第k大就肯定要想到什么权值线段树,主席树,平衡树之类的 然后就简单了 用并查集判断连通,每个节点建立一颗权值线段树,连通的时候直接合并即可 查询时再二分递归地查找 时间复杂度好像不是很稳 ...

  10. BZOJ 3747: [POI2015]Kinoman 【线段树】

    Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[i]部. 你可以选择l,r(1<=l< ...