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); } }