因为要显示的东西太多,不能一次性拿到,所以想在onScroll里做一个多线程的查询更新。
listAdapter = new ListAdapter(this, m_ArrayList,m_XXArray, m_XXArrayList); public void onScroll(AbsListView arg0,int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (totalItemCount <= 0){
return;
}
if (firstVisibleItem + visibleItemCount >= totalItemCount){
//当前可视第1条index + 当前可视界面存在?条 >= 总数Index 时,说明在底端
m_thread = new Thread(new MyThead);
m_thread.start();
}
}线程是class MyThead implements Runnable {
public boolean bCanceled = false; @Override
public void run() {
try {
//读取要用的内容并添加
m_ArrayList.add,m_XXArray.add, m_XXArrayList.add;
//更新
listAdapter.notifyDataSetChanged();
} catch (Exception e) {
e.printStackTrace();
}
} }我是按照上面的代码来做的,但是有问题,多次之后屏幕一片灰,ListView的Item全没有了。感觉和线程的同步等有关系,但是不知道如何解决,想请教各位大大。
listAdapter = new ListAdapter(this, m_ArrayList,m_XXArray, m_XXArrayList); public void onScroll(AbsListView arg0,int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (totalItemCount <= 0){
return;
}
if (firstVisibleItem + visibleItemCount >= totalItemCount){
//当前可视第1条index + 当前可视界面存在?条 >= 总数Index 时,说明在底端
m_thread = new Thread(new MyThead);
m_thread.start();
}
}线程是class MyThead implements Runnable {
public boolean bCanceled = false; @Override
public void run() {
try {
//读取要用的内容并添加
m_ArrayList.add,m_XXArray.add, m_XXArrayList.add;
//更新
listAdapter.notifyDataSetChanged();
} catch (Exception e) {
e.printStackTrace();
}
} }我是按照上面的代码来做的,但是有问题,多次之后屏幕一片灰,ListView的Item全没有了。感觉和线程的同步等有关系,但是不知道如何解决,想请教各位大大。
解决方案 »
- android中是使用socket和http进行通信,哪种方式更好,更常用?假如数据访问量很大的情况下,应该使用哪种?
- android如何下载5M或者以上的大图到Gallery。
- android 应用
- 被方向键选中的按钮变成橘色,这是什么事件
- android 项目中取得该项目所用到的jar 包
- Skai 的头文件 和 库
- 有没有可能将android模拟成一个蓝牙设备?
- android
- webview 运行崩溃 Binary XML file line #8: Error inflating class android.webkit.WebV
- 新手求助,紧急需要
- 拍照的照片显示
- 请问一下 如何设置一个VIEW的高度
您的问题可以是在滚动的时候,线程启动的次数过于频繁,所以倒至notifyDataSetChanged方法调度过大。当listview的刷新频率大时,可能会出现LZ的情况。当你使用 handler进行启动的时候,则会能队列的形式进行处理新开启的线程,这样应该就不会错了。希望我的回答对你有帮助