RecyclerView 和 SwipeRefreshLayout

本文介绍了如何结合RecyclerView和SwipeRefreshLayout实现在Android应用中下拉刷新和上拉加载功能。同时强调了数据更新及RecyclerView的Adapter在其中的重要性,并提供了导入RecyclerView的必要性。读者可以通过提供的GitHub链接查看示例代码。

1: 下拉刷新,上拉加载

2:  注意数据更新,还有recycelerview的adapter

3: RecyclerView 是需要导入的,然后才能够应用的

 

https://github.com/kodulf/SwipeRefreshLayoutRecyclerViewDemo

 

package kodulf.swiperefreshlayoutrecyclerviewdemo;

import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.NonNull;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener, View.OnScrollChangeListener {

    private RecyclerView recyclerView;
    private SwipeRefreshLayout mSwipeRefreshLayout;
    private ArrayList<String> mList = new ArrayList<>();
    private MyAdapter myAdapter;
    private static final int ADD = 0;
    private static final int REFRESH = 1;
    private int lastVisiableNum = 0;

    private Handler mHandler = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(Message msg) {
            int what = msg.what;
            switch (what){
                case REFRESH:
                    mSwipeRefreshLayout.setRefreshing(false);
                    mList.clear();
                    for (int i = 0; i < 10; i++) {
                        mList.add(""+i);
                    }
                    myAdapter.notifyDataSetChanged();
                    break;

                case ADD:

                    for (int i = 0; i < 10; i++) {
                        mList.add(""+i);
                    }
                    //更新使用这个
                    myAdapter.notifyDataSetChanged();
                    break;
            }
            return false;
        }
    });
    private LinearLayoutManager mLinearLayoutManager;

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

        for (int i = 0; i < 10; i++) {
            mList.add(i+"");
        }

        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);
        mSwipeRefreshLayout.setColorSchemeColors(Color.RED,Color.BLUE,Color.YELLOW);
        mSwipeRefreshLayout.setSize(SwipeRefreshLayout.LARGE);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            recyclerView.setOnScrollChangeListener(this);
        }


        myAdapter = new MyAdapter();
        mLinearLayoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(mLinearLayoutManager);
        recyclerView.setAdapter(myAdapter);

        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);

                if(newState == RecyclerView.SCROLL_STATE_IDLE){
                    if(lastVisiableNum+1==mList.size()){
                        mHandler.sendEmptyMessageDelayed(ADD,1000);
                    }
                }

            }

            @Override
            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                lastVisiableNum=mLinearLayoutManager.findLastCompletelyVisibleItemPosition();
            }
        });

        mSwipeRefreshLayout.setOnRefreshListener(this);

    }



    @Override
    public void onRefresh() {
        Toast.makeText(this,"onRefresh",Toast.LENGTH_SHORT).show();
        mHandler.sendEmptyMessageDelayed(REFRESH,3000);
    }

    @Override
    public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {

    }


    class MyAdapter extends RecyclerView.Adapter<RecyclerViewHolder>{

        @NonNull
        @Override
        public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
            //inflate 

            View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);

            return new RecyclerViewHolder(v);
        }

        @Override
        public void onBindViewHolder(@NonNull RecyclerViewHolder recyclerViewHolder, int i) {
                recyclerViewHolder.textView.setText(mList.get(i));
        }

        @Override
        public int getItemCount() {
            int size = mList.size();
            return size;
        }
    }


    class RecyclerViewHolder extends RecyclerView.ViewHolder{

        TextView textView;

        public RecyclerViewHolder(@NonNull View itemView) {
            super(itemView);
            textView = (TextView)itemView.findViewById(R.id.item_textView);
        }


    }


}

 

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipeRefreshLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        </android.support.v7.widget.RecyclerView>
    </android.support.v4.widget.SwipeRefreshLayout>



</LinearLayout>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值