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是几,这个数组长度就是几,类型一一对应
Android如果动态改变CursorAdapter Item个数的更多相关文章
- 【Android多屏适配】动态改变Listview item高度
在ListView的Adapter中去直接获取传入View的LayoutParams是会报空指针异常的,唯一的方法是在xml中嵌套布局一层LinearLayout <?xml version=& ...
- Android中动态改变控件的大小的一种方法
在Android中有时候我们需要动态改变控件的大小.有几种办法可以实现 一是在onMeasure中修改尺寸,二是在onLayout中修改位置和尺寸.这个是可以进行位置修改的,onMeasure不行. ...
- Android 如何动态改变Actionbar上的item图标
1.Activity菜单机制 (与dialog类似) Activity有一套机制来实现对菜单的管理,方法如下: 1.public boolean onCreateOptionsMenu(Menu me ...
- Android ListView动态改变Item高度
在adapter的getView方法中进行设置,代码如下 @Override public View getView(int position, View convertView, ViewGroup ...
- [Android疑难杂症]动态改变Background后Padding无效的问题
前言 在Layout中指定好background和padding以后,程序里面动态修改background之后padding就失效了,貌似是一个BUG,这里找到了一篇英文文章,简单翻译分享一下. 声明 ...
- Android中动态改变Listview中字体的颜色
效果如下: 账目显示用的是Listview,要实现的功能为使其根据所在Item是“收入”还是“支出”来把数字设置成绿色或红色 方法是自定义适配器,并重写其中getView()函数,实现如下: //自定 ...
- Android实现动态改变屏幕方向(Landscape & Portrait)
1.AndroidManifest.xml: <activity> android:screenOrientation="portrait" ... 2.xx.java ...
- Android之动态改变控件大小
利用getLayoutParams()方法和setLayoutParams()方法.三步曲:1.首先利用getLayoutParams()方法,获取控件的LayoutParams.eg:LayoutP ...
- 带你体验Android自定义圆形刻度罗盘 仪表盘 实现指针动态改变
带你体验Android自定义圆形刻度罗盘 仪表盘 实现指针动态改变 转 https://blog.csdn.net/qq_30993595/article/details/78915115 近期有 ...
随机推荐
- 大数据学习——Storm学习单词计数案例
需求:计算单词在文档中出现的次数,每出现一次就累加一次 遇到的问题 这个问题是<scope>provided</scope>作用域问题 https://www.cnblogs. ...
- 初识LiveScript
The LiveScript Book 邂逅 LiveScript 就像很多现代化的语言一样,LiveScript 使用缩进来表示语句块,使用换行取代分号来表示一个语句的结束 (如果你想要一行 ...
- SQL 优化案例之变更表结构
从慢日志报表中看到一条很长的SQL select id from myinfo and (( SUBSTRING_INDEX(location_axis, ) ) ) ), '$%') ) or ( ...
- Azure Storage Blob文件名区分大小写
最近在使用Azure Storage的时候发现Storage的命名是区分大小写的,导致我们系统在更新图片的时候有时候更新不上,最终通过判断处理文件名解决. 因此我们在使用Storage需要注意一下文件 ...
- 【树状数组区间修改单点查询+分组】HDU 4267 A Simple Problem with Integers
http://acm.hdu.edu.cn/showproblem.php?pid=4267 [思路] 树状数组的区间修改:在区间[a, b]内更新+x就在a的位置+x. 然后在b+1的位置-x 树状 ...
- java system.out.printf()的使用方法
package test; public class Main { public static void main(String[] args) { // 定义一些变量,用来格式化输出. double ...
- robotframework安装和配置【转IBM:https://www.ibm.com/developerworks/cn/opensource/os-cn-robot-framework/index.html】
内容 概览 Robot Framework 介绍 Robot Framework 的安装和配置 RIDE 编辑器介绍 创建测试项目 简单的测试用例的编写 总结 相关主题 评论 Robot Fr ...
- scrapy框架之comand line tool
一 Global Command 1 startproject https://docs.scrapy.org/en/latest/topics/commands.html#startproject ...
- MySQL导出数据库、数据库表结构、存储过程及函数【用】
一.导出数据库 我的mysql安装目录是D:\Program Files\MySQL\MySQL Server 5.5\bin\,导出文件预计放在D:\sql\ 在mysql的安装目录执行命令: my ...
- android 完美退出应用程序。
Android 程序在点击回退键时,如果只有一个activity,调用finish()方法就能退出界面,如果有多个界面,在调用该方法时,只会销毁当前的activity,显示栈顶的其它activity, ...