Android ListView 的動態加載數據
package com.src.hero;import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; /**
- @author Hero
- 2012-3-8 下午11:04:21
實現動態加載的效果 */ public class DynamicLoadActivity extends Activity { private ListView lv_main; private LinearLayout linearlayout = null; private LayoutParams wlayoutparams, flayoutparams; listAdapter adpter = null; Thread thread;
/* Called when the activity is first created. / @Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.main); lv_main = (ListView) findViewById(R.id.listView1); adpter = new listAdapter(this); wlayoutparams = new LinearLayout.LayoutParams(320, 50);// 定義的是FootView的寬高 flayoutparams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);// 定義FootView中控件的布局 ProgressBar progressbar = new ProgressBar(this);// 定義一個ProgressBar progressbar.setPadding(50, 0, 0, 0);// left, top, right, bottom TextView tv_wait = new TextView(this);// 定義一個TextView tv_wait.setText("正在動態加載……"); tv_wait.setTextSize(20f); tv_wait.setGravity(Gravity.CENTER_VERTICAL); tv_wait.setPadding(10, 0, 0, 0); LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.HORIZONTAL); layout.addView(progressbar, flayoutparams); layout.addView(tv_wait, flayoutparams); layout.setGravity(Gravity.CENTER); linearlayout = new LinearLayout(this); linearlayout.addView(layout, wlayoutparams); linearlayout.setGravity(Gravity.CENTER_VERTICAL); lv_main.addFooterView(linearlayout); lv_main.setAdapter(adpter); lv_main.setOnScrollListener(scroller);
} /**
滾動監聽器 */ OnScrollListener scroller = new OnScrollListener() { @Override public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub if (firstVisibleItem + visibleItemCount == totalItemCount) { // 啟動一個線程去加載網絡數據 if (thread == null || !thread.isAlive()) { thread = new Thread() { @Override public void run() { try { // 處理網絡方法,在這里用線程休眠3秒方法來處理 Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } Message message = new Message(); message.what = 1; handler.sendMessage(message); } }; thread.start(); } }
}
@Override public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
}; /**
消息隊列 */ private Handler handler = new Handler() { @Override public void handleMessage(Message msg) {
// TODO Auto-generated method stub switch (msg.what) { case 1: if (adpter.count <= 101) { adpter.count += 10; int currentPage = adpter.count / 10; Toast.makeText(getApplicationContext(), "第" + currentPage + "頁", Toast.LENGTH_LONG).show(); } else { lv_main.removeFooterView(linearlayout); } // 重新刷新Listview的adapter里面數據 adpter.notifyDataSetChanged(); break; default: break; }
} };
public class listAdapter extends BaseAdapter {
int count = 10; Context context;
public listAdapter(Context context) {
this.context = context;
}
@Override public int getCount() {
// TODO Auto-generated method stub return count;
}
@Override public Object getItem(int position) {
// TODO Auto-generated method stub return position;
}
@Override public long getItemId(int item) {
// TODO Auto-generated method stub return item;
}
@Override public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub TextView tv_content; if (convertView == null) { tv_content = new TextView(context); } else { tv_content = (TextView) convertView; } tv_content.setText("Item " + position); tv_content.setTextSize(20f);//字體的大小20f tv_content.setGravity(Gravity.CENTER);//顯示在中間 tv_content.setHeight(50);//高度為50 return tv_content;
}
} }</pre>