因为要显示的东西太多,不能一次性拿到,所以想在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全没有了。感觉和线程的同步等有关系,但是不知道如何解决,想请教各位大大。

解决方案 »

  1.   

    if (firstVisibleItem + visibleItemCount >= totalItemCount)光这个判断是不够的,最好还有一个判断,一但线程正在加载,就不要再新开线程了。
      

  2.   

    我觉得你可以这样做,在onScroll里面,当滚动时,你发送一个handler,你可以把线程放在handler里面。
       您的问题可以是在滚动的时候,线程启动的次数过于频繁,所以倒至notifyDataSetChanged方法调度过大。当listview的刷新频率大时,可能会出现LZ的情况。当你使用 handler进行启动的时候,则会能队列的形式进行处理新开启的线程,这样应该就不会错了。希望我的回答对你有帮助