`

ListView学习(三) 加载视野内的数据

阅读更多

在滑动的过程中,只有在视野中的item才会加载数据,其他的其实显示的都是”loading…” 这样的好处就是如果加载的是图片的话,那么始终加载的只是几张图片而非是所有的图片,这样就能很好的避免出现内存溢出的问题,当然其他的图片要及时的回收才行,否则图片对象依然在内存里(这样的话图片最好先保存在本地,这样就不会频繁的发送请求,就不会产生网络流量),关于加载大量图片的问题会在以后的文章中出现。下面就看代码,非常简单。

 

public class ListViewTest extends Activity implements ListView.OnScrollListener {

  private boolean mBusy = false;

    ListView l;

    SlowAdapter slowAdapter;

    int totalPage = 10;// 共有页数

    int nowPage = 1;// 当前页

    int lastItem = 0;

    List<String> mStrings= new ArrayList<String>();

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.main);

         l = (ListView) findViewById(R.id.mainList);

        getListByPage(nowPage);

        slowAdapter=new SlowAdapter(this,mStrings);

        l.setAdapter(slowAdapter);

 

        l.setOnScrollListener(this);

    }

   

   

    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,

            int totalItemCount) {

    lastItem = firstVisibleItem + visibleItemCount - 1;

    }

   

    public void onScrollStateChanged(AbsListView view, int scrollState) {

        if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {    //滑动停止

            mBusy = false;

           

            if(lastItem==mStrings.size()-1){

            nowPage++;

            if (nowPage <= totalPage) {

                getListByPage(nowPage);

            }

            }

            slowAdapter.notifyDataSetChanged();

    }

        else if(scrollState == OnScrollListener.SCROLL_STATE_TOUCH_SCROLL){//滑动手未松开

               mBusy = true;

        }else if(scrollState == OnScrollListener.SCROLL_STATE_FLING){//滑动中手已松开

               mBusy = true;

        }

    }

   

    private class SlowAdapter extends BaseAdapter {

        private LayoutInflater inflater;

        private List<String> list;

        public SlowAdapter(Context context,List<String> list) {

            this.list=list;

            inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        }

        public int getCount() {

            return list.size();

        }

 

        public Object getItem(int position) {

            return position;

        }

 

        public long getItemId(int position) {

            return position;

        }

 

        public View getView(int position, View convertView, ViewGroup parent) {

            TextView text;

            

            if (convertView == null) {

                text = (TextView)inflater.inflate(android.R.layout.simple_list_item_1, parent, false);

            } else {

                text = (TextView)convertView;

            }

            if (!mBusy) {

                text.setText(list.get(position));

            } else {

                text.setText("Loading...");

            }

            return text;

        }

    }

   

    public void getListByPage(int page){

int start = (page-1)*20;

    int size=page*20;

    for(int i=start;i<size;i++){

         mStrings.add("条目"+i); 

    }

 

 

   }

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics