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. 大数据学习——Storm学习单词计数案例

    需求:计算单词在文档中出现的次数,每出现一次就累加一次 遇到的问题 这个问题是<scope>provided</scope>作用域问题 https://www.cnblogs. ...

  2. 初识LiveScript

        The LiveScript Book 邂逅 LiveScript 就像很多现代化的语言一样,LiveScript 使用缩进来表示语句块,使用换行取代分号来表示一个语句的结束 (如果你想要一行 ...

  3. SQL 优化案例之变更表结构

    从慢日志报表中看到一条很长的SQL select id from myinfo and (( SUBSTRING_INDEX(location_axis, ) ) ) ), '$%') ) or ( ...

  4. Azure Storage Blob文件名区分大小写

    最近在使用Azure Storage的时候发现Storage的命名是区分大小写的,导致我们系统在更新图片的时候有时候更新不上,最终通过判断处理文件名解决. 因此我们在使用Storage需要注意一下文件 ...

  5. 【树状数组区间修改单点查询+分组】HDU 4267 A Simple Problem with Integers

    http://acm.hdu.edu.cn/showproblem.php?pid=4267 [思路] 树状数组的区间修改:在区间[a, b]内更新+x就在a的位置+x. 然后在b+1的位置-x 树状 ...

  6. java system.out.printf()的使用方法

    package test; public class Main { public static void main(String[] args) { // 定义一些变量,用来格式化输出. double ...

  7. robotframework安装和配置【转IBM:https://www.ibm.com/developerworks/cn/opensource/os-cn-robot-framework/index.html】

    内容   概览 Robot Framework 介绍 Robot Framework 的安装和配置 RIDE 编辑器介绍 创建测试项目 简单的测试用例的编写 总结 相关主题 评论   Robot Fr ...

  8. scrapy框架之comand line tool

    一 Global Command 1 startproject https://docs.scrapy.org/en/latest/topics/commands.html#startproject ...

  9. MySQL导出数据库、数据库表结构、存储过程及函数【用】

    一.导出数据库 我的mysql安装目录是D:\Program Files\MySQL\MySQL Server 5.5\bin\,导出文件预计放在D:\sql\ 在mysql的安装目录执行命令: my ...

  10. android 完美退出应用程序。

    Android 程序在点击回退键时,如果只有一个activity,调用finish()方法就能退出界面,如果有多个界面,在调用该方法时,只会销毁当前的activity,显示栈顶的其它activity, ...