Android: ListView pull-up loading, pull-down refresh simple implementation

ListView has many uses, among which more data and adding data are obvious. You can refer to WeChat Moments, pull up to load, pull down to refresh.

We have added a ListView control whose id is listView to xml.

<?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>

Followed by the preparation of our 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) {
        }
    }
}

Since the code has been commented in detail, it will not be explained. Mainly, OnScrollListener monitors the use of ListView.

Guess you like

Origin blog.csdn.net/new_Aiden/article/details/50995009