//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. LiveScript 字面量

        The LiveScript Book 字面值 Numbers .4是被视为无效的,你必须使用前导0.例如:0.4. 1.20162.12.343.0.4 数字之间的下划线和数值后追加的字母将 ...

  2. Convolution Fundamental II

    Practical Advice Using Open-Source Implementation We have learned a lot of NNs and ConvNets architec ...

  3. 2017 Multi-University Training Contest - Team 4

    日常绝望系列 Questionnaire HDU - 6075 In order to get better results in official ACM/ICPC contests, the te ...

  4. 九度oj 题目1024:畅通工程

    题目描述:     省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的若干条道 ...

  5. JavaWeb基础(HTML)

    代码改变世界 HTML HTML是指超本标记语言,它不是编程语言,而是一种标记语言.标记语言是一套标记标签,HTML使用标记标签来描述网页,用以定义如何在页面上展示信息. 1.HTML标签 HTML标 ...

  6. 【极角排序+双指针线性扫】2017多校训练七 HDU 6127 Hard challenge

    acm.hdu.edu.cn/showproblem.php?pid=6127 [题意] 给定平面直角坐标系中的n个点,这n个点每个点都有一个点权 这n个点两两可以连乘一条线段,定义每条线段的权值为线 ...

  7. cf682E Alyona and Triangles

    You are given n points with integer coordinates on the plane. Points are given in a way such that th ...

  8. LibieOJ 6165 一道水题 (线性筛)

    题目链接 LOJ6165 题目意思其实就是求LCM(1, 2, 3, ..., n) 直接用线性筛求出1到1e8之间的所有质数 然后对于每个质数p,他对答案的贡献为$p^{i}$ 其中$p^{i}$小 ...

  9. 迁移桌面程序到MS Store(8)——通过APPX下载Win32Component

    在上一篇<迁移桌面程序到MS Store(7)——APPX + Service>中,我们提到将desktop application拆分成UI Client+Service两部分.其中UI ...

  10. java基础之IO流(二)之字符流

    java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...