android Listview分页

1.ListView的footer 布局   item_demo6_list_head.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" >

    <LinearLayout
        android:id="@+id/footer_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:orientation="horizontal"
        >

        <ProgressBar
            style="?android:attr/progressBarStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="正在加载,请稍等。。。" />
    </LinearLayout>

</LinearLayout>

 2.activity_demo布局(主布局)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".Activity.Demo6Activity">
    <include layout="@layout/default_nav_head"/>
    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/demo6_lv_id"></ListView>


</LinearLayout>

 Demo6Activity(主界面代码)

public class Demo6Activity extends AppCompatActivity {

    private ListView listView;

    private List<String> data;

    private ArrayAdapter<String> adapter;
    //分页加载的数据的数量
    private int pageSize=10;
    private int currentPage = 0;
    private final int pageType=1;
    //查看更多
    private TextView moreTextView;
    //正在加载进度条
    private LinearLayout loadProgressBar;


    private ListView listview ;

     //
//用来判断是否加载完成
     private boolean loadfinish=true;
    private View footerView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_demo6);

        footerView =LayoutInflater.from(this).inflate(R.layout.item_demo6_list_head, null);
        footerView.findViewById(R.id.footer_layout).setVisibility(View.GONE);

        data = new ArrayList<String>();
        addMore();

        listView=(ListView) findViewById(R.id.demo6_lv_id);


        //添加"加载更多"一定要在设置Adapter之前
        adapter= new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);


        listView.addFooterView(footerView);
        listView.setAdapter(adapter);



        //当用户滑动listview到最后一项是,动态的加载第二页的数据
        listView.setOnScrollListener(new AbsListView.OnScrollListener()
        {
            public void onScrollStateChanged(AbsListView view, int scrollState)
            {
                // TODO Auto-generated method stub
            }

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


                //得到listview最后一项的id
                int lastItemId=listView.getLastVisiblePosition();
                //判断用户是否滑动到最后一项,因为索引值从零开始所以要加上1
                if((lastItemId+1)==totalItemCount)
                {

                    footerView.findViewById(R.id.footer_layout).setVisibility(View.VISIBLE);
                    if(totalItemCount>0)
                    {
                        //判断当前页是否超过最大页,以及上一页的数据是否加载完成
                        if( loadfinish )
                        {


                            loadfinish=false;
                            new Thread(new Runnable()
                            {
                                public void run()
                                {
                                    try {

                                        Thread.sleep(4000);
                                    } catch (InterruptedException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    }

                                    addMore();

                                    //通知listview改变UI中的数据
                                    handler.sendEmptyMessage(0);
                                }
                            }).start();
                        }
                    }

                }

            }
        });



    }

private void addMore(){

    for (int i=0;i<pageSize;i++)
    {
        int position = currentPage*pageSize+i;
        data.add(position+"");
    }
    currentPage ++;
}

    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 0:
                    //改变适配器的数目
//                    adapter.count += pageSize;
                    //通知适配器,发现改变操作
                    adapter.notifyDataSetChanged();

                    loadfinish=true;

                    footerView.findViewById(R.id.footer_layout).setVisibility(View.GONE);

                    break;

                default:
                    break;
            }

            super.handleMessage(msg);
        }
    };

}

 

posted @ 2017-06-21 16:41  新年新气象  阅读(237)  评论(0编辑  收藏  举报