安卓:ListView上拉加载,下拉刷新简单实现

ListView有很多用处,其中更加数据、增加数据就是很明显的。可以参考微信朋友圈,上拉加载、下拉刷新。

我们在xml中增加了id为listView的ListView控件。

<?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="com.test.MainActivity">

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

其次是我们MainActivity.java的编写

import android.app.Activity;
import android.os.Bundle;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;

public class MainActivity extends Activity {
    private ListView listView; // 获取listView
    private ArrayList<String> arrayList; // 存储数据
    private ArrayAdapter<String> arrayAdapter; // 适配器
    private int time; // 记录加载次数
    private int count; // 设置每次加载的条数
    private MyOnScrollListener myOnScrollListener; // 监听ListView滑动

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

        init();
    }

    // 初始化
    public void init() {
        arrayList = new ArrayList<>();
        count = 20;
        time = 1;
        for (int i = 0; i < time * count; i++)
            arrayList.add("初始化list" + i);

        listView = (ListView) this.findViewById(R.id.listView);
        arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, arrayList);
        listView.setAdapter(arrayAdapter);
        myOnScrollListener = new MyOnScrollListener();
        listView.setOnScrollListener(myOnScrollListener);
    }

    // 增加count条记录
    public void add() {
        time++;
        arrayList.clear();
        for (int i = 0; i < time * count; i++)
            arrayList.add("增加list" + i);
        arrayAdapter.notifyDataSetChanged();
    }

    // 更新数据
    public void update() {
        arrayAdapter.clear();
        for (int i = 0; i < time * count; i++)
            arrayList.add("更新list" + i);
        arrayAdapter.notifyDataSetChanged();
    }

    // 监听事件,监听ListView的滑动
    class MyOnScrollListener implements AbsListView.OnScrollListener {
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            // 当不滚动时
            if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
                // 判断是否滚动到底部
                if (view.getLastVisiblePosition() == view.getCount() - 1) {
                    add();
                }
                // 判断是否滚到最顶部
                else if(view.getFirstVisiblePosition() == 0) {
                    update();
                }
            }
        }

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

鉴于代码已经有详细的注释了,就不解释了。主要还是OnScrollListener 监听ListView的使用。

猜你喜欢

转载自blog.csdn.net/new_Aiden/article/details/50995009