项目中那些事| ListView 一些问题
来源:互联网 发布:淘宝卖的息肌丸管用吗 编辑:程序博客网 时间:2024/05/16 00:59
4. java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread.
原因主要还是牵涉到 线程之间同步 问题,ListView本身就是线程不安全的 ,出现以下错误。 主要是 线程1更新了Adapter中的内容,却还没有来得及通知内容已经更新,就又有线程2更新了Adapter中的内容,这个时候如果线程1再通知内容更新
解决办法:
把数据源ListData 和 notifyDataSetChanged(); 放到同一个线程中。
我相信方法有很多中,如
1.如何你使用线程处理的后台数据,那么就在run方法里面用Handler将数据send出来到主线程里面的handleMessage然后再addAll或者赋值;
1-1. 不send出,创建一个临时的 List<>, 在handleMessage然后再addAll;
2.如果用的异步task,那么在onPostExecute里面去add或者赋值就ok了,注意千万不要在后台去修改类变量的方式去修改数据;
3. ListView的item动画
实现item动画其实很简单,只需在控件Listview中添加属性android:layoutAnimation=“”即可,下面看具体步骤:
<ListView android:id="@id/lv_test" android:layout_width="match_parent" android:layout_height="wrap_content" android:cacheColorHint="#00000000" android:layoutAnimation="@anim/item_layout_anim"/>
首先说一下什么是LayoutAnimationsController?
LayoutAnimationsController可以用于实现使多个控件按顺序一个一个的显示。
1)LayoutAnimationsController用于为一个layout里面的控件,或者是一个ViewGroup里面的控件设置统一的动画效果。
2)每一个控件都有相同的动画效果。
3)控件的动画效果可以在不同的时间显示出来。
4)LayoutAnimationsController可以在xml文件当中设置,以可以在代码当中进行设置。
在xml当中使用LayoutAnimationController
1)在res/anim文件夹下创建一个名为item_layout_anim文件:
android:dylay -动画间隔时间;
android:animationOrder -动画执行的循序(normal:顺序,random:随机,reverse:反向显示)
android:animation –引用动画效果文件
<?xml version="1.0" encoding="utf-8"?><layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android" android:delay="0.5" android:animationOrder="normal" android:animation="@anim/item_anim"/>这里注意layoutAnimation首字母大小写(小写),我就在这里调试了好久,汗。。。
2)创建item_anim文件,设置动画效果,从左到右飞入效果
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator" > <translate android:fromXDelta="-100%p" android:duration="1000" android:toXDelta="0.0" /> <alpha android:fromAlpha="0.0" android:duration="500" android:toAlpha="1.0"/></set>到这里,就完成实现ListView中item的动画效果了~
通常默认能获得focus的控件有Button,Checkable继承来的所有控件,这就意味着如果你的自定义ListViewItem中有Button或者Checkable的子类控件的话,那么默认focus是交给了子控件,而ListView的Item能被选中的基础是它能获取Focus,也就是说我们可以通过将ListView中Item中包含的所有控件的focusable属性设置为false,这样的话ListView的Item自动获得了Focus的权限,也就可以被选中了,也就会响应onItemClickListener中的onItemClick()方法;
解决方法:
我们可以通过对Item Layout的根控件设置其android:descendantFocusability=”blocksDescendant”即可,这样Item Layout就屏蔽了所有子控件获取Focus的权限。(注:单个设置子控件的 focusable 有时不起作用,有知道原因的请留言,3Q~)
a.如果是listView的id是使用系统默认的id,如下, 则可以在实现此listView的adapter里override isEnabled()方法:
@Override public boolean isEnabled(int position) { return false; }
b.如果是listView的id是使用系统默认的id,如下, 则可以在实现此listView的adapter里override isEnabled()方法:
ListView.setEnabled(false);
- 项目中那些事| ListView 一些问题
- 项目中那些事|ListView中嵌套ListView问题
- Listview中一些小的注意问题
- 项目中那些事|动画
- Android ListView那些事
- Android ListView那些事
- 项目中那些事|string.xml 那些不为人知的事
- ListView中item与控件抢夺焦点的那些事
- 关于ListView的Item中嵌套ProgressBar的那些事
- 项目中那些事|控件之EditText
- 项目中那些事|控件之TextView
- Android ListView中加入Spinner的一些问题
- 关于Listview 使用过程中 的一些问题及 解决方法
- listview的item中含有checkbox的一些问题
- 关于项目中所用listview中Item展开问题思路
- 项目中遇到的一些小问题
- 项目中遇到的一些小问题
- 项目中遇到的一些小问题
- hdu 2065
- 阿里巴巴集团去IOE运动的思考与总结
- 初探Tomcat源码 (6) —— Cookie
- Ubuntu12.04 编译android源代码及生成模拟器经历分享
- 导入文件到db2数据库
- 项目中那些事| ListView 一些问题
- 我自己觉得不太好的代码一览:
- linux设备命名及存储命令
- IDEA IU下载安装
- Mac OS、iOS和X11的Retina显示支持
- 使用CURL静态库报错的问题
- 嵌入式Linux之我行——按键驱动在2440上的实例开发(带去抖动)
- xmanager enterprise 4注册码,测试可用。
- java读取csv文件 .