Android-下拉刷新

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;//listview
	private 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() {

			@Override
			public void onClick(View v) {
				//将进度条显示出来。
				pb.setVisibility(View.VISIBLE);
				//将按钮显示为不可见。
				but.setVisibility(View.GONE);
				//在这里进行异步数据的加载。(参数1:new 运行控件,参数2:异步加载的时间)
				handler.postDelayed(new Runnable() {

					@Override
					public 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() {

				@Override
				public void run() {
					//加载更多的数据。
					lostmove();
					//将进度条显示出来。
					pb.setVisibility(View.VISIBLE);

					//通知listview刷新数据。
					sa.notifyDataSetChanged();
				}
			},2000);

		}

	}

}

  5:效果图:

时间: 2024-10-10 17:29:42

Android-下拉刷新的相关文章

Android 下拉刷新上拉加载 多种应用场景 超级大放送(上)

转载请标明原文地址:http://blog.csdn.net/yalinfendou/article/details/47707017 关于Android下拉刷新上拉加载,网上的Demo太多太多了,这里不是介绍怎么去实现下拉刷新上拉加载,而是针对下拉刷新上拉加载常用的一些应用场景就行了一些总结,包含了下拉刷新上拉加载过程中遇到的一些手势冲突问题的解决方法(只能算是抛砖引玉). 去年9月的时候,那时自己正在独立做Android项目.记得刚刚写完那个ListView列表页面(木有下拉刷新,上拉加载)

【原创:参赛作品】窥视懒人的秘密---android下拉刷新开启手势的新纪元

小飒的成长史原创作品:窥视懒人的秘密---android下拉刷新开启手势的新纪元转载请注明出处 *****************************************************************        前言:窥视懒人那些不为人知的秘密 ***************************************************************** 作为一个程序员,哪有不勤奋的道理,当我们都在为技术奋不顾身的时候.偏偏懒人创造了世界. 有的

android 下拉刷新上拉加载更多,高仿ios左滑动删除item,解决了众多手势问题

一.前言 老规矩,别的不说,这demo是找了很相关知识集合而成的,可以说对我这种小白来说是绞尽脑汁!程序员讲的是无图无真相!现在大家一睹为快! 二.比较关键的还是scroller这个类的 package com.icq.slideview.view; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.util.TypedValue; i

Android下拉刷新库,利用viewdraghelper实现,集成了下拉刷新,底部加载更多,数据初始加载显示loading等功能

项目Github地址:https://github.com/sddyljsx/pulltorefresh Android下拉刷新库,利用viewdraghelper实现. 集成了下拉刷新,底部加载更多,以及刚进入加载数据的loadview.包括了listview与gridview的改写. 效果1: 效果2: 效果3: 效果4: 效果5: 使用说明: imageList=(ListView)findViewById(R.id.image_list); imageAdapter=new ImageA

Android 下拉刷新上拉加载效果功能,使用开源项目android-pulltorefresh实现

应用场景: 在App开发中,对于信息的获取与演示,不可能全部将其获取与演示,为了在用户使用中,给予用户以友好.方便的用户体验,以滑动.下拉的效果动态加载数据的要求就会出现.为此,该效果功能就需要应用到所需要的展示页面中. 知识点介绍: 本文主要根据开源项目android-pulltorefresh展开介绍. android-pulltorefresh [一个强大的拉动刷新开源项目,支持各种控件下拉刷新 ListView.ViewPager.WevView.ExpandableListView.G

Android 下拉刷新上拉加载效果功能

应用场景: 在App开发中,对于信息的获取与演示,不可能全部将其获取与演示,为了在用户使用中,给予用户以友好.方便的用户体验,以滑动.下拉的效果动态加载数据的要求就会出现.为此,该效果功能就需要应用到所需要的展示页面中. 知识点介绍: 本文主要根据开源项目android-pulltorefresh展开介绍. android-pulltorefresh [一个强大的拉动刷新开源项目,支持各种控件下拉刷新 ListView.ViewPager.WevView.ExpandableListView.G

Android下拉刷新,上拉加载。

原文:Android下拉刷新,上拉加载. 源代码下载地址:http://www.zuidaima.com/share/1550463747574784.htm Android列表的下拉刷新,上拉加载. 源码截图 package com.zuidaima.stay.pull.lib; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Color; import

Android 下拉刷新上拉载入 多种应用场景 超级大放送(上)

转载请标明原文地址:http://blog.csdn.net/yalinfendou/article/details/47707017 关于Android下拉刷新上拉载入,网上的Demo太多太多了,这里不是介绍怎么去实现下拉刷新上拉载入,而是针对下拉刷新上拉载入经常使用的一些应用场景即可了一些总结,包括了下拉刷新上拉载入过程中遇到的一些手势冲突问题的解决方法(仅仅能算是抛砖引玉). 去年9月的时候.那时自己正在独立做Android项目. 记得刚刚写完那个ListView列表页面(木有下拉刷新,上

android下拉刷新上拉加载简单的实现方法;

项目中需要用到android下拉刷新和上拉加载:所以学习了一个很简单的很方便的一个例子:自己也写过下拉刷新和上拉加载的功能:但是如果每个界面都要实现这个功能的话非常的麻烦:所以学习了别人很好的demo:然后分享一下: 我的学习步骤: 在网上下载demo:然后把必要的导入到项目中: 在此附上下载源码网址:http://download.csdn.net/detail/android_drawing/8596553 所有的源代码如下: XListViewFooter类 /** * @file XFo

Android 下拉刷新控件SwipeRefreshLayout结合WebView使用

SwipeRefreshLayout 是谷歌官方下拉刷新控件,4.0以下的版本需要用到  android-support-v4.jar包才能用到 android-support-v4.jar 包下载地址:http://download.csdn.net/detail/h7870181/7784247 官网API地址:https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html G