Android-下拉重新整理

來源:互聯網
上載者:User

標籤:pre   not   清單項目   注意   amp   listview   list   instance   pac   

1:先定義一個listview控制項。

2:定義模板視圖:

3:定義底部view的視圖:

4:編寫原始碼,實現下拉重新整理的效果:

package com.huanglinbin.finsh;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.view.View;import android.view.View.OnClickListener;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.Button;import android.widget.ListView;import android.widget.ProgressBar;import android.widget.SimpleAdapter;import android.widget.Toast;public class MainActivity extends Activity implements OnScrollListener {//私人化屬性。private SimpleAdapter sa;private ListView lv;//listviewprivate Button but;//按鈕private ProgressBar pb;//載入條private List<Map<String,Object>> list;//集合//listview的底部view的視圖。private View moreView;//非同步載入器。private Handler handler;//設定最大的載入數,超過時就不再載入。private int maxNum;//最後可見條目索引。private int lastVisibleIndex;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                //設定最大的資料數(相當於資料庫中所有的資料)        maxNum = 50;        //首先要先找到listview的控制項。        lv = (ListView) findViewById(R.id.listView1);        //先執行個體化底部view的視圖。        moreView = getLayoutInflater().inflate(R.layout.but,null);                //初始化資料。        list = new ArrayList<Map<String,Object>>();        //類比資料庫。        for(int i=0;i<20;i++){        Map<String,Object> map = new HashMap<String, Object>();        map.put("tv1","第"+i+"標題");        map.put("tv2","第"+i+"內容");        list.add(map);        }                //執行個體化模擬器。        sa = new SimpleAdapter(MainActivity.this,        list,        R.layout.item,        new String[]{"tv1","tv2"},        new int[]{R.id.tv1,R.id.tv2}        );        //載入底部的view的視圖。注意一定要在setAdapter載入模擬器之前。        lv.addFooterView(moreView);        lv.setAdapter(sa);                //給listview綁定滾動的監聽事件。        lv.setOnScrollListener(MainActivity.this);               //擷取到按鈕。        //but = (Button) findViewById(R.id.but);        pb = (ProgressBar) findViewById(R.id.pb);         //非同步載入器。        handler = new Handler();              //給按鈕綁定點擊的監聽事件。       /* but.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//將進度條顯示出來。pb.setVisibility(View.VISIBLE);//將按鈕顯示為不可見。but.setVisibility(View.GONE);//在這裡進行非同步資料的載入。(參數1:new 運行控制項,參數2:非同步載入的時間)handler.postDelayed(new Runnable() {@Overridepublic void run() {//載入更多的資料。lostmove();//將進度條顯示出來。pb.setVisibility(View.VISIBLE);//將按鈕顯示為不可見。but.setVisibility(View.GONE);//通知listview重新整理資料。sa.notifyDataSetChanged();}},2000);}});*/            }    //定義每次載入資料的方法。    private void lostmove(){    //擷取到適配器中的資料。    int count = sa.getCount();    //進行判斷資料不足載入資料時的判斷。    if(count+5<maxNum){    //每次載入資料5條。    for(int i=count;i<count+5;i++){    Map<String,Object> map1 = new HashMap<String, Object>();    map1.put("tv1","第"+i+"標題");    map1.put("tv2","第"+i+"內容");    list.add(map1);    }    }else{    //資料不足5條資料載入的時候的資料載入。    for(int j=count;j<maxNum;j++){    Map<String,Object> map1 = new HashMap<String, Object>();    map1.put("tv1","第"+j+"標題");    map1.put("tv2","第"+j+"內容");    list.add(map1);    }    }    }    public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {//滾動時一直回調,直到停止滾動時才停止回調。單擊時回調一次。//firstVisibleItem:當前能看見的第一個清單項目ID(從0開始)//visibleItemCount:當前能看見的清單項目個數(小半個也算)//totalItemCount:清單項目共數        // 計算最後可見條目的索引lastVisibleIndex = firstVisibleItem+visibleItemCount-1;//所有的清單項目已經和最大的資料數相等時,則移除底部的listview的視圖。if(totalItemCount == maxNum+1){//移除底部listview。lv.removeFooterView(moreView);Toast.makeText(MainActivity.this, "資料已經全部載入完畢!", Toast.LENGTH_SHORT).show();}}public void onScrollStateChanged(AbsListView view, int scrollState) {//滑到底部後載入,判斷listview已經停止滾動並且最後可視的條目等於adapter的條目if(scrollState==OnScrollListener.SCROLL_STATE_IDLE&&lastVisibleIndex==sa.getCount()){//將進度條顯示出來。pb.setVisibility(View.VISIBLE);handler.postDelayed(new Runnable() {@Overridepublic void run() {//載入更多的資料。lostmove();//將進度條顯示出來。pb.setVisibility(View.VISIBLE);//通知listview重新整理資料。sa.notifyDataSetChanged();}},2000);}}       }

  5::

 

Android-下拉重新整理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.