Android_自己写的简单上拉加载

原创 2016年05月31日 10:05:43

DO:
main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/listView_listView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

</LinearLayout>

footer.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ProgressBar
        android:id="@+id/progressBar1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/progressBar1"
        android:layout_marginTop="10dp"
        android:text="加载中......"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

Activity

package com.lxf;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

/**
 * @address BeiJing
 * @author LiXufei
 * @function android_listview
 */
public class cListView extends Activity{

    private ListView view1;
    private List<String> list = new ArrayList<String>();
    private ArrayAdapter<String> adapter;
    private final int SUCCESS = 0;      //加载成功标志
    private boolean flag = true;    //是否刷新
    private View footerView;    //页脚

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.android_listview);

        view1 = (ListView) findViewById(R.id.listView_listView1);

        //初始化页脚
        footerView = getLayoutInflater().inflate(R.layout.android_listview_footer,null );
        //初始化数据
        list.addAll(addData(20));
        //初始化适配器
        adapter = new ArrayAdapter<String>(cListView.this, android.R.layout.simple_list_item_1, list);
        //适配器
        view1.setAdapter(adapter);
        //设置滚动监听
        view1.setOnScrollListener(new MyScrollListner(5, 20));
    }

    //handler
    private Handler handler = new Handler(){
        public void handleMessage(android.os.Message msg) {

            if (msg.what == SUCCESS) {
                flag = true;
                List<String>res = (List<String>) msg.obj ;
                list.addAll(res);
                adapter.notifyDataSetChanged();
                Toast.makeText(cListView.this, "加载成功!", 0).show();
            }
            if (flag) {
                if (view1.getFooterViewsCount() > 0) {
                    view1.removeFooterView(footerView);
                }
            }

        };
    };

    //滚动刷新类
    class MyScrollListner implements OnScrollListener{

        private int pageCount;  //加载的页数
        private int pageSize;   //加载的个数

        public MyScrollListner(int countPage, int sizePage) {
            super();
            this.pageCount = countPage;
            this.pageSize = sizePage;
        }

        public void onScrollStateChanged(AbsListView view, int scrollState) {       }

        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {

            int currentCount = firstVisibleItem+visibleItemCount;   //当前个数
            int currentPage = currentCount/pageSize;    //当前的页数
            int nextPage = currentPage+1;   //下个页数

            if (currentCount == totalItemCount && nextPage <= pageCount && flag) {  //执行数据刷新
                view1.addFooterView(footerView);    //添加页脚
                flag = false;   //改变标志
                new Thread(){
                    public void run() {
                        SystemClock.sleep(3000);//睡眠3秒,不会立即加载
                        List<String> addData = addData(pageSize);   //获取新数据
                        //通过handler更新listview
                        Message message = Message.obtain();
                        message.what = SUCCESS;
                        message.obj = addData;
                        handler.sendMessage(message);
                    };
                }.start();
            }
        }
    }

    //添加数据方法
    public List<String> addData(int Count){
        ArrayList<String> datas = new ArrayList<String>();
        //准备数据
        for (int i = 0; i <= Count; i++) {
            datas.add("数据"+i);
        }
        return datas;
    }

}
版权声明:本文为博主原创文章,未经博主允许不得转载。

自己写一个简单的Spring IOC容器

为了能更好的理解SpirngIOC是如何工作的,在查阅网上的资料后,自己写了一个非常简单的SpringIOC容器,使用setter方法将值注入。 本例子需要用到jdom的包:http://pan.ba...
  • lr222584
  • lr222584
  • 2017年01月26日 17:18
  • 485

数据结构键值HashMap之自己编写简单的HashMap

通过学习HashMap数据结构,自己实现一个简单的HashMap
  • nayan3480232
  • nayan3480232
  • 2017年08月09日 00:16
  • 228

如何写一个简单的分页

我们先看一下简单的需求。 当前页码前后显示 3 页,然后需要显示第一页和最后一页 未显示的页码用省略号表示。 举例:如果总共 110 页 ...
  • NPower_Zhang
  • NPower_Zhang
  • 2017年04月17日 19:19
  • 876

很简单的加密算法

public string EnDecryption(string str) { char[] EnStr = str.ToCharArray(); ...
  • CommandBaby
  • CommandBaby
  • 2015年09月10日 14:46
  • 932

写一个简单的操作系统

如果一定要找出OS最重要的核心,那就是调度器,调度器本身即可以看作一个简单的操作系统,允许以周期性或单次方式来调用任务。从底层的角度看,调度器可以看作是一个由许多不同任务共享的定时器中断服务程序,因此...
  • u010469993
  • u010469993
  • 2017年03月20日 15:30
  • 1206

自己写一个简单的ArrayList

自己通过写一个简单的SimpleArrayList来加深对JDK源码中的ArrayList的理解。 构造器 如果没有对集合设定长度,这里我们默认采取长度为10作为内置数组的初始化长度。 pu...
  • humian151
  • humian151
  • 2017年09月27日 15:42
  • 140

自己写的几个简单常用的脚本

自己写的几个简单常用的脚本 By: 吴垠 Date: 2...
  • wooin
  • wooin
  • 2008年02月01日 10:47
  • 11134

自己实现一个简单版的HashMap

public class MyHashMap { //默认初始化大小 16 private static final int DEFAULT_INITIAL_CAPACI...
  • uhgagnu
  • uhgagnu
  • 2017年03月03日 18:41
  • 537

怎样自己写一个简单的操作系统

如非业务需要必要,不建议自己实现完整的计算机操作系统。重造车轮的累赘先不说。        在自己造的过程中,仿佛体验了事无巨细一切都要自己实现的艰辛,和访问底层硬件处理dirty work带来的虚假...
  • i792439187
  • i792439187
  • 2013年08月11日 20:44
  • 840

从零开始编写一个简单的Linux文件系统

最近想研究一下Linux文件系统,最好的开始当然是自己写一个简单的文件系统,并能够mount上。这方面的工作其实已经有很多人做过了,比如IBM Linux技术中心的教程:Linux FileSyste...
  • shuxiaogd
  • shuxiaogd
  • 2015年09月30日 16:09
  • 2403
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android_自己写的简单上拉加载
举报原因:
原因补充:

(最多只允许输入30个字)