java 线程 listview

阅读: 评论:0

java 线程 listview

java 线程 listview

相关搜索:"Listview 加载更多",

在现在的SINA微博或者象twitter,dzone等网站中,当加载一个很长的列表时,往往都是

先加载部分内容,然后当用户用拖拉条往下拖动时,再加载更多的内容.这里在android

中,可以用listview搭配线程实现同样的功能,举例如下: 人人

1)首先设置footer部分,即在listview的下面设置footview,

footview的模版如下:

android:orientation="horizontal"

android:layout_width="fill_parent"

android:gravity="center_horizontal"

android:padding="3dp"

android:layout_height="fill_parent">

android:id="@id/android:empty"

android:layout_width="wrap_content"

android:layout_height="fill_parent"

android:gravity="center"

android:padding="5dp"

android:text="Loading "/>

然后记得在加到adapter前,把footview加到listview中去

View footerView = ((SystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.listfooter, null, false);

this.setListAdapter(adapter);

然后,listview的onscroll方法如下:

public void onScrollStateChanged(AbsListView view, int scrollState) {}

public void onScroll(AbsListView view, int firstVisibleItem,

int visibleItemCount, int totalItemCount) {

int lastInScreen = firstVisibleItem + visibleItemCount;

String last&#String(lastInScreen);

Log.d("show",last);

String total&#String(totalItemCount);

Log.d("total",total);

if((lastInScreen == totalItemCount) && !(loadingMore)){

Thread thread =  new Thread(null, loadMoreListItems);

thread.start();

}

}

});

Thread thread =  new Thread(null, loadMoreListItems);

thread.start();

下面来分析下,其中,可以预先设置一个屏的listview能显示多少条记录,比如设置为5条,

这里itemsPerPage=15,然后首先

int lastInScreen = firstVisibleItem + visibleItemCount;

这里,获得每屏中最后一条数据的位置,比如一次先显示5条,则lastInScreen=5了,

if((lastInScreen == totalItemCount) && !(loadingMore)){

Thread thread =  new Thread(null, loadMoreListItems);

thread.start();

}

这里是判断,如果是滚动了滚动条,并且用户以及功能浏览完了一次屏幕所需要的数目(比如5个),则启用线程序loadMoreListItems去处理,加载另外的新的5个了.

而如果没滚动,则第一次显示时,也要启用线程序loadMoreListItems去处理.

.

下面看loadMoreListItems.

private Runnable loadMoreListItems = new Runnable() {

public void run() {

loadingMore = true;

myListItems = new ArrayList();

//Simulate a delay, delete this on a production environment!

try { Thread.sleep(1000);

} catch (InterruptedException e) {}

//Get 15 new listitems

for (int i = 0; i < itemsPerPage; i++) {

myListItems.add("Date: " + (d.get(Calendar.MONTH)+ 1) + "/" + d.get(Calendar.DATE) + "/" + d.get(Calendar.YEAR) );                                          d.add(Calendar.DATE, 1);

}

runOnUiThread(returnRes);

}

};

在这个线程里,实际上就是用循环往listview中加日期,产生从当天时间起的若干个日期格式,然后调用 runOnUiThread(returnRes);去更新UI主线程,注意 runOnUiThread是

android提供的方法,可以帮助你在线程中执行UI更新操作.

在更新主线程中,十分简单,只不过往adapter中去增加元素,并且notifyDataSetChanged通知listview起变化了,并设置loadingMore=false,因为已经加载完了一次了.风之境地 java-javascript 蘑菇街女装

本文发布于:2024-01-31 19:48:00,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170670168330941.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:线程   java   listview
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23