Android ListView 的動態加載數據

openkk 12年前發布 | 42K 次閱讀 Android Android開發 移動開發

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>Android ListView 的動態加載效果 Android ListView 的動態加載效果

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!