android 常用到的 listview ,scrollview 等上拉刷新

直接上代码。

其实主要就是通过继承  OnScrollListener 这个接口  在 onScrollStateChanged 这个方法里面 判断listview是否到最后1条。

然后加载数据,下面部分代码。

public class MainActivity extends Activity implements OnScrollListener {
	private ArrayAdapter   adapter;
	private ListView listView;
    private TextView loadText;
    private ProgressBar pg;
    private List<String> list;
   
    // ListView底部View
    private View moreView;
    private Handler handler = new Handler();
    
    private int MaxNum = 22;// 设置一个最大的数据条数,超过即不再加载
    // 最后可见条目的索引
    private int lastVisibleIndex;
  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.ll);
      
        moreView = getLayoutInflater().inflate(R.layout.moredata, null);
        loadText = (TextView) moreView.findViewById(R.id.bt_load);
        pg = (ProgressBar) moreView.findViewById(R.id.pg);
        listView.addFooterView(moreView);

        
        // 用map来装载数据,初始化10条数据
        list = new ArrayList<String>();
      
        // 实例化SimpleAdapter
        adapter=  new ArrayAdapter(this, R.layout.item,  R.id.tv_title, list);
        listView.setAdapter(adapter);
        listView.setOnScrollListener(this);
        
        loadDate();

        /**  手动加载    **/     
//        loadText.setOnClickListener(new OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                pg.setVisibility(View.VISIBLE);// 将进度条可见
//                loadText.setVisibility(View.GONE);// 按钮不可见
//                handler.postDelayed(new Runnable() {
//                    @Override
//                    public void run() {
//                        loadDate();
//                        loadText.setVisibility(View.VISIBLE);
//                        pg.setVisibility(View.GONE);
//                        adapter.notifyDataSetChanged();// 通知listView刷新数据
//                    }
//                }, 2000);
//            }
//        });

    }

    
    /** 说明一下    
     * onScroll              是滑动后触发的
     * onScrollStateChanged  是拖着滑动触发
     * */
    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {
        // 计算最后可见条目的索引
        lastVisibleIndex = firstVisibleItem + visibleItemCount - 1;

        // 所有的条目已经和最大条数相等,则移除底部的View
        if (totalItemCount == MaxNum + 1) {
        	listView.removeFooterView(moreView);
            Toast.makeText(this, "数据全部加载完成", Toast.LENGTH_LONG).show();
        }
    }

    
    //滑动的时候判断是否已经到了底部。
    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
    	//OnScrollListener.SCROLL_STATE_TOUCH_SCROLL
    	//OnScrollListener.SCROLL_STATE_FLING
    	//OnScrollListener.SCROLL_STATE_IDLE
    	
    	if (scrollState == OnScrollListener.SCROLL_STATE_IDLE
                && lastVisibleIndex == adapter.getCount()) {
            // 当滑到底部时自动加载
             pg.setVisibility(View.VISIBLE);
             loadText.setVisibility(View.GONE);
             handler.postDelayed(new Runnable() {
	             @Override
	             public void run() {
		                 loadDate();
		                 loadText.setVisibility(View.VISIBLE);
		                 pg.setVisibility(View.GONE);
		                 adapter.notifyDataSetChanged();
		             }
	          }, 2000);
        }
    }

    
    //这里加载数据 
	private void loadDate(){
		
	        int count = adapter.getCount();

//	        if (count + 5 < MaxNum) {
//	            for (int i = count; i < count + 5; i++) {
//	                list.add("新增第" + i + "行");
//	            }    
//	        } else {
//	            for (int i = count; i < MaxNum; i++) {
//	                list.add("新增第" + i + "行");
//	            }
//	        }

	        //一次加载10条
	        for (int i = count; i < count + 20; i++) {
                list.add("新增第" + i + "行");
            }
	        
	     
	    }
	}

几个工程:

1. 上面那个简单的 上拉加载更多的例子

http://download.csdn.net/detail/kongbaidepao/6884945


2. 网上的一个 上拉加载更多   下拉刷新的例子

http://download.csdn.net/detail/kongbaidepao/6884933


3. 还有1个挺完善的  listview scrollview  gridview 加载更多的例子

http://download.csdn.net/detail/kongbaidepao/6884999


另外附一个开源项目,有兴趣的可以去看看呢。

https://github.com/chrisbanes/Android-PullToRefresh

android 常用到的 listview ,scrollview 等上拉刷新

上一篇:在Windows商店应用中使用浅色主题


下一篇:windows 7蓝屏解决办法