【www.bbyears.com--今天更新】
今天得需求是做listview+上下拉动在header和footer显示progressdialog,但不影响用户操作
直接上代码,我已经加上注释了,自己看。
代码如下
packagecom.stay.main;
importjava.net.HttpURLConnection;
importjava.util.ArrayList;
importjava.util.HashMap;
importorg.json.JSONObject;
importandroid.app.Activity;
importandroid.app.ProgressDialog;
importandroid.graphics.drawable.Drawable;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.HandlerThread;
importandroid.os.Looper;
importandroid.os.Message;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.widget.AbsListView;
importandroid.widget.AbsListView.OnScrollListener;
importandroid.widget.Button;
importandroid.widget.LinearLayout;
importandroid.widget.ListView;
importandroid.widget.RelativeLayout;
importandroid.widget.TextView;
importcom.stay.wifi.R;
/**
* @author Stay
* 动态加载listview数据,上拉 刷新,下拉 更多
*/
publicclassListViewActivityextendsActivityimplementsOnScrollListener {
privatestaticfinalintLOAD =0;
privatestaticfinalintERROR =0;
privatestaticfinalintMEMBER =1;
privatestaticfinalintLOADED =2;
privatestaticfinalintDIALOG =3;
privatestaticfinalintFULL =4;
privateNearbyAdapter adapter;
privateListView nearby_lv;
privateRelativeLayout nearby_lv_header;
privateButton list_bottom_btn;
privateLinearLayout list_bottom_linear;
privateTextView bottom_progress_text;
privateRelativeLayout nearby_lv_footer;
privateButton list_header_btn;
privateLinearLayout list_header_linear;
privateTextView heard_progress_text;
privateArrayList
privateintlastItem;
privateHashMap
privatecom.stay.main.ListViewActivity.MyHandler myHandler;
privateProgressDialog dialog;
privateintcurPage =1;
privatebooleanisMember =false;
privateintfirstItem;
publicintcount;
/** Called when the activity is first created. */
@Override
publicvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initView();
myHandler.sendEmptyMessage(LOAD);
}
@Override
publicvoidonScrollStateChanged(AbsListView view,intscrollState) {
DebugUtil.debug("onScrollStateChanged");
//当滚动停止且滚动的总数等于数据的总数,去加载
if(lastItem == count && scrollState == SCROLL_STATE_IDLE) {
DebugUtil.debug("onScrollStateChanged--------next");
if(curPage ==4&& !isMember) {
DebugUtil.show(this,"您不是正式会员,请申请正式会员,");
list_bottom_linear.setVisibility(View.GONE);
}else{
//加载数据
myHandler.sendEmptyMessage(LOAD);
}
return;
}
//当往上拉时更新数据,将data清空然后去重新加载
if(firstItem ==0&& scrollState == SCROLL_STATE_IDLE) {
DebugUtil.debug("onScrollStateChanged--------refresh");
curPage =0;
myHandler.sendEmptyMessage(LOAD);
}
}
@Override
publicvoidonScroll(AbsListView view,intfirstVisibleItem,intvisibleItemCount,inttotalItemCount) {
DebugUtil.debug("firstVisibleItem="+ firstVisibleItem);
DebugUtil.debug("visibleItemCount="+ visibleItemCount);
DebugUtil.debug("totalItemCount="+ totalItemCount);
//这里要减二,因为我加了header footer
lastItem = firstVisibleItem + visibleItemCount -2;
firstItem = firstVisibleItem;
}
publicintgetData() {
try{
HttpURLConnection conn = DownloadUtil.download(url//自己写咯);
ArrayList
if(curPage ==0&& nearby_data.size() >0) {
nearby_data.clear();
count =0;
}
if(temp !=null&& temp.size() >0) {
count += temp.size();
nearby_data.addAll(temp);
DebugUtil.debug("nearby_data.size()="+nearby_data.size());
}else{
returnFULL;
}
returnLOADED;
}catch(Exception e) {
returnERROR;
}
}
privateHandler handler =newHandler() {
@Override
publicvoidhandleMessage(Message msg) {
super.handleMessage(msg);
switch(msg.what) {
caseDIALOG:
list_bottom_linear.setVisibility(View.VISIBLE);
list_header_linear.setVisibility(View.VISIBLE);
break;
caseLOADED:
list_bottom_linear.setVisibility(View.GONE);
list_header_linear.setVisibility(View.GONE);
curPage++;
adapter.notifyDataSetChanged();
break;
caseERROR:
DebugUtil.debug("error,missing data");
break;
caseMEMBER:
DebugUtil.debug("you must regist formal member");
break;
default:
break;
}
}
};
//创建子线程加载数据,然后更新
privateclassMyHandlerextendsHandler {
privateintstatus;
publicMyHandler(Looper looper) {
super(looper);
}
@Override
publicvoidhandleMessage(Message msg) {
synchronized(this) {
switch(msg.what) {
caseLOAD:// get data from server
handler.sendEmptyMessage(DIALOG);//显示等待框
status = getData();
handler.sendEmptyMessageDelayed(status,1000);
break;
default:
break;
}
}
}
}
publicvoidinitView() {
imageCache =newHashMap
HandlerThread handlerThread =newHandlerThread("nearby");
// 在使用HandlerThread的getLooper()方法之前,必须先调用该类的start();
handlerThread.start();
myHandler =newMyHandler(handlerThread.getLooper());
nearby_lv = (ListView) findViewById(R.id.nearby_lv);
nearby_lv_footer = (RelativeLayout) LayoutInflater.from(ListViewActivity.this).inflate(R.layout.nearby_lv_header,null);
list_bottom_btn = (Button) nearby_lv_footer.findViewById(R.id.list_bottom_btn);
list_bottom_linear = (LinearLayout) nearby_lv_footer.findViewById(R.id.list_bottom_linear);
bottom_progress_text = (TextView) nearby_lv_footer.findViewById(R.id.progress_text);
nearby_lv_header = (RelativeLayout) LayoutInflater.from(ListViewActivity.this).inflate(R.layout.nearby_lv_header,null);
list_header_btn = (Button) nearby_lv_header.findViewById(R.id.list_bottom_btn);
list_header_linear = (LinearLayout) nearby_lv_header.findViewById(R.id.list_bottom_linear);
heard_progress_text = (TextView) nearby_lv_header.findViewById(R.id.progress_text);
list_header_btn.setText("刷新");
list_bottom_btn.setText("更多");
list_header_linear.setVisibility(View.GONE);
nearby_lv.addHeaderView(nearby_lv_header);
nearby_lv.addFooterView(nearby_lv_footer);
// list_header_btn.setOnClickListener(header_click);
adapter =newNearbyAdapter(ListViewActivity.this, nearby_data);
nearby_lv.setAdapter(adapter);
nearby_lv.setOnScrollListener(ListViewActivity.this);
}
}