Android中列表上拉刷新功能

本篇博客介绍的是利用Google自己的下拉刷新组件SwipeRefreshLayout来实现下拉刷新功能。

效果图如下:

其中相关的适配器,item的布局文件等就不写了,很简单。

1、activity_main.xml的代码如下:

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

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/Main_srLayoutNewsList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/Main_rViewNewsList"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView>

    </android.support.v4.widget.SwipeRefreshLayout>

</LinearLayout>

2、MainActivity.java的代码如下:

package com.deepreality.swiperefreshlayoutdemo;

import android.content.Context;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

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

public class MainActivity extends AppCompatActivity {

    private Context mContext;

    private RecyclerView rViewNewsList;
    private SwipeRefreshLayout srLayoutNewsList;

    private List<Tb_News> tbNewsList;
    private Tb_News tb_news;
    private NewsListAdapter newsListAdapter;

    private String[] arrayNews = new String[] {"人民日报", "中华日报", "河南日报", "北京日报", "天津日报", "上海日报", "河南日报", "北京日报", "天津日报", "上海日报"};

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

        baseDataInit();
        bindViews();
        viewsAddListener();
        viewsDataInit();
    }

    private void baseDataInit() {
        mContext = this;
        tbNewsList = new ArrayList<>();
    }

    private void bindViews() {
        rViewNewsList = findViewById(R.id.Main_rViewNewsList);
        srLayoutNewsList = findViewById(R.id.Main_srLayoutNewsList);

        //设置RecyclerView的排列方式
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        rViewNewsList.setLayoutManager(linearLayoutManager);

        //设置刷新动画的颜色
        srLayoutNewsList.setColorSchemeColors(getResources().getColor(R.color.colorPrimaryDark));
    }

    private void viewsAddListener() {
        //给SwipeRefreshLayout组件添加下拉刷新监听事件
        srLayoutNewsList.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        for (int i = 0; i < arrayNews.length; i++) {
                            tb_news = new Tb_News("imageUrl", arrayNews[i]);
                            tbNewsList.add(tb_news);
                        }
                        //刷新列表
                        newsListAdapter.notifyDataSetChanged();
                        //刷新结束,隐藏刷新动画
                        srLayoutNewsList.setRefreshing(false);
                    }
                });
            }
        });
    }

    private void viewsDataInit() {
        newsListSetAdapter();
    }

    private void newsListSetAdapter() {
        for (int i = 0; i < arrayNews.length; i++) {
            tb_news = new Tb_News("imageUrl", arrayNews[i]);
            tbNewsList.add(tb_news);
        }
        newsListAdapter = new NewsListAdapter(mContext, tbNewsList);
        rViewNewsList.setAdapter(newsListAdapter);
    }
}

猜你喜欢

转载自blog.csdn.net/lpCrazyBoy/article/details/81945156