Android如果动态改变CursorAdapter Item个数

//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是几,这个数组长度就是几,类型一一对应

原文地址:https://www.cnblogs.com/lchd/p/3543404.html