摘要:
使用了AsyncTask在后台刷新适配器,并且通知ui线程更新ListView,运行时发现时不时的出现 如题 的错误,导致程序崩溃,解决方法如下:1.建立一个缓冲数据集,这个数据集就是填充适配器的数据集,如ArrayList2.在AsyncTask的后台方法(doInBackground)中将数据添加至缓冲数据集中,然后调用onProgressUpdate通知更新3.在onProgressUpdate方法中,将缓冲数据集的数据添加至原数据集中,然后将缓冲数据集中的数据清空注意:访问缓冲数据集的时候,需要加上同步锁 synchronized 阅读全文
摘要:
问题起因:在做一个从sd卡中加载数据显示在ListView中,由于数据可能比较多,考虑到用户体验,就使用AsyncTask来异步加载,数据一条一条的添加至ListView中.开始数据比较少的时候,基本上瞬间完成所有加载,没发现这个问题,后来把测试数据添加至一百来条,问题就出现了,当我的数据还在加载的时候,用手在ListView上做Touch操作的时候,程序报错,报错信息如下:java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notifica 阅读全文
摘要:
一开始在代码中我以为使用tvAge.setTextAppearance(context, resid);这样的的方式就能行,运行之后发现这个设置并未生效,于是到处搜索在代码中设置系统样式的的解决方法,在一篇国外帖子中发现了new TextView(mContext, null,android.R.attr.textAppearanceLarge);这样形式的设置代码,把它用的我的程序中,运行,ok但是这种设置方式需要在初始化控件的时候,如果我们需要在控件创建完毕之后修改它的样式,又不知道该如何做了 阅读全文
摘要:
指针函数:返回指针类型的函数,定义方法如下:类型标识符 *函数名(参数列表)函数指针:指向函数入口地址的指针,定义方法如下:类型标识符 (*指针名称)(形参列表)下面我们通过一段代码加深我们的理解://指针函数,和函数指针#include //引入 输入输出功能 文件头//定义一个函数指针char* (*fun)(char* str,char* str_search);//实现一个字符串查找的功能void input(char *str,char *str_search){ printf("请输入字符串:"); gets(str);//获取输入字符串 printf(&quo 阅读全文
摘要:
看这个标题都要晕了,我们不妨把他拆开来理解,比较容易指针数组:对象是一个数组,数组元素的类型是指针指针数组的定义方式:类型名 *数组名[数组长度];如:int *p[8];数组指针:对象是一个指针,指针的类型是一个数组数组指针的定义方式:类型名 (*数组名)[数组长度];如:int (*p)[8];无论是使用指针数组或是数组指针,都可以达到我们想要的效果,下面我们就来比较一下两种对象操作数组的方式:#include void main(int argc,char *argv[]){ int arr[4][4]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}... 阅读全文
摘要:
指针是c的灵魂,这个真是不容置疑,太灵活了,太随意了,当然,如果理解了,用得好,比弱类型语言的var 用的还舒服,用的不好,那就是程序的灾难,哈哈,不多说了,访问二维或多维数组有如下几种方式,下面给出代码#include int main(){ int arr[4][4] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//定义一个二维数组 //使用不同的方式得出每行的首地址 for(int i = 0;i<4;i++) { printf("使用 arr+i\t的方式求得arr数组第%d行的数据首地址为:%d\n",i,... 阅读全文