ListView滾動到底部自動載入資料,listview滾動

來源:互聯網
上載者:User

ListView滾動到底部自動載入資料,listview滾動

在Android中有很多時候會選擇用ListView載入資料,有的是分批載入,比如每次載入20條,100條就要載入5次,如果一次性載入100條,ListView載入就會變慢,如果是有圖片的話,一是浪費流量,二是item中帶圖片會出現錯位的問題l,ListView載入資料目前好多App的做法

1. 分批載入,滑動到底部自動更新

2. 滑動到底部,手動的點擊載入更多

3. 下拉重新整理 + 底部載入更多

今天實現ListView滑動到底部自動更新的效果。

原理:監聽ListView的滑動事件,判斷ListView是否滑動到底部,然後去載入資料。

[java] view plaincopyprint?
  1. public class MainActivity extends Activity {  
  2.     private ListView listview;  
  3.     private List<String> datas;  
  4.     private LayoutInflater inflater;  
  5.     private MyAdapter adapter;  
  6.     private List<String>  contents;  
  7.     private int count = 0;  
  8.     private View footView;  
  9.     private Handler handler = new Handler();  
  10.     int lastItem;  
  11.     private RelativeLayout loading;  
  12.     @Override  
  13.     protected void onCreate(Bundle savedInstanceState) {  
  14.         super.onCreate(savedInstanceState);  
  15.         setContentView(R.layout.activity_main);  
  16.         initData();  
  17.         inflater = LayoutInflater.from(this);  
  18.         listview = (ListView) findViewById(R.id.listview);  
  19.         adapter = new MyAdapter();  
  20.         footView = inflater.inflate(R.layout.footer, null);  
  21.         loading = (RelativeLayout) footView.findViewById(R.id.loading);  
  22.         //listview的addFooterView()添加view到listview底部一定要加在listview.setAdapter(adapter);這代碼前面  
  23.         listview.addFooterView(footView);  
  24.         listview.setAdapter(adapter);  
  25.         //添加listview滾動監聽  
  26.         listview.setOnScrollListener(new OnScrollListener() {  
  27.             //AbsListView view 這個view對象就是listview  
  28.             @Override  
  29.             public void onScrollStateChanged(AbsListView view, int scrollState) {  
  30.                 if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {  
  31.                     if (view.getLastVisiblePosition() == view.getCount() - 1) {  
  32.                         loadData();  
  33.                     }  
  34.                 }  
  35.             }  
  36.             @Override  
  37.             public void onScroll(AbsListView view, int firstVisibleItem,  
  38.                     int visibleItemCount, int totalItemCount) {  
  39.                    lastItem = firstVisibleItem + visibleItemCount - 1 ;  
  40.             }  
  41.         });  
  42.     }  
  43.     protected void loadData() {  
  44.         loading.setVisibility(View.VISIBLE);  
  45.         handler.postDelayed(new Runnable() {  
  46.             @Override  
  47.             public void run() {  
  48.                  load();  
  49.                  loading.setVisibility(View.GONE);  
  50.                  adapter.notifyDataSetChanged();  
  51.             }  
  52.         }, 5000);  
  53.     }  
  54.     protected void load() {  
  55.         int count = adapter.getCount() + 1;  
  56.         for(int i = count; i < count + 20; i++) {  //每次載入20條資料
  57.              contents.add("載入資料:::" + i);  
  58.         }  
  59.     }  
  60.     private void initData() {  
  61.         contents = new ArrayList<String>();  
  62.         for(int i = 1; i < 20; i++){  
  63.             contents.add("載入資料:::" + i);  
  64.         }  
  65.     }  
  66.       
  67.     class MyAdapter extends BaseAdapter{  
  68.         @Override  
  69.         public int getCount() {  
  70.             return contents.size();  
  71.         }  
  72.         @Override  
  73.         public Object getItem(int position) {  
  74.             return contents.get(position);  
  75.         }  
  76.   
  77.         @Override  
  78.         public long getItemId(int position) {  
  79.             return position;  
  80.         }  
  81.   
  82.         @Override  
  83.         public View getView(int position, View convertView, ViewGroup parent) {  
  84.             ViewHolder holder;  
  85.             if(convertView == null){  
  86.                 convertView = inflater.inflate(R.layout.item, parent, false);  
  87.                 holder = new ViewHolder();  
  88.                 holder.tvContent = (TextView) convertView.findViewById(R.id.tvContent);  
  89.                 convertView.setTag(holder);  
  90.             }else{  
  91.                 holder = (ViewHolder) convertView.getTag();  
  92.             }  
  93.             holder.tvContent.setText(contents.get(position));  
  94.             return convertView;  
  95.         }  
  96.         class ViewHolder{  
  97.             TextView tvContent;  
  98.         }  
  99.     }  
  100. }  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.