android SwipeRefreshLayout 实现 下拉刷新 上拉加载

上图


没有什么注释   没有demo 但是 思路清晰 好好理解看一下

xml

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

    android:layout_height="match_parent"
    tools:context="com.jsu.whr.recyclerview.Main3Activity">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycle_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

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

主activity

package com.jsu.whr.recyclerview;

import android.os.Handler;
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 com.jsu.whr.myapplication.R;

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

public class Main3Activity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {
    SwipeRefreshLayout mSwipeRefreshLayout;
    RecyclerView mRecyclerView;
    MyAdapter adapter;
    List<String> list = new ArrayList<String>();
    LinearLayoutManager  mLayoutManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);
        mSwipeRefreshLayout = (SwipeRefreshLayout) this.findViewById(R.id.swipe_refresh_widget);
        mSwipeRefreshLayout.setColorSchemeResources(
                R.color.black,
                R.color.read,
                R.color.green,
                R.color.blue);
        mSwipeRefreshLayout.setOnRefreshListener(this);//下拉监听
        mRecyclerView = (RecyclerView) this.findViewById(R.id.recycle_view);
        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);
        mRecyclerView.setOnScrollListener(mOnScrollListener);
        adapter = new MyAdapter(this);
        mRecyclerView.setAdapter(adapter);
    }
    private RecyclerView.OnScrollListener mOnScrollListener = new RecyclerView.OnScrollListener() {
        private int lastVisibleItem;//窗体可见最后一个item
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            if (newState == RecyclerView.SCROLL_STATE_IDLE//滑动状态   SCROLL_STATE_IDLE表示停止
                    && lastVisibleItem + 1 == adapter.getItemCount()
                    && adapter.isShowFooter()) {//条件表示 滑到最底端了
                //加载更多
                    handler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            list.addAll(loadNewData());
                            adapter.notifyDataSetChanged();
                        }
                    },1000);


            }
        }
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            lastVisibleItem = mLayoutManager.findLastVisibleItemPosition();
        }
    };
    @Override
    public void onRefresh() {
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    if(list!=null){
                        list.clear();
                    }
                    list.addAll(loadData());
                    adapter.setDatalist(list);
                    mSwipeRefreshLayout.setRefreshing(false);
                }
            },4000);
    }
    public List<String> loadData(){
        List<String> listdata = new ArrayList<String>();
        for(int i=0;i<20;i++){
            list.add("---->"+i);
        }
        return listdata;
    }
    public List<String> loadNewData(){
        List<String> listdata = new ArrayList<String>();
        for(int i=0;i<20;i++){
            list.add("---xin->"+i);
        }
        return listdata;
    }
   Handler handler = new Handler(){

   };
}
adapter

package com.jsu.whr.recyclerview;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.jsu.whr.myapplication.R;

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

/**
 * Created by k90 on 2016-09-02.
 */
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
    ItemViewHolder mItemViewHolder;
    List<String>Datalist = new ArrayList<String>();
    Context context;
    private boolean mShowFooter = true;
    private static final int TYPE_ITEM = 0;
    private static final int TYPE_FOOTER = 1;
    public void setDatalist(List<String> datalist) {
        Datalist = datalist;
        this.notifyDataSetChanged();
    }

    public MyAdapter(Context context) {
        this.context = context;
    }

    @Override
    public int getItemViewType(int position) {
        // 最后一个item设置为footerView
        if(!mShowFooter) {
            return TYPE_ITEM;
        }
        if (position + 1 == getItemCount()) {
            return TYPE_FOOTER;
        } else {
            return TYPE_ITEM;
        }
    }
    public boolean isShowFooter() {
        return this.mShowFooter;
    }
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        if(viewType == TYPE_ITEM) {
            View view = LayoutInflater.from(context).inflate(R.layout.items, viewGroup, false);
            mItemViewHolder = new ItemViewHolder(view);
            return mItemViewHolder;
        }
        else{
            View view = LayoutInflater.from(viewGroup.getContext()).inflate(
                    R.layout.footer, null);
            view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT));
            return new FooterViewHolder(view);
        }
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) {
        if(viewHolder instanceof ItemViewHolder) {
            String s = Datalist.get(i);
            if (s == null) {
                return;
            }
            ((ItemViewHolder) viewHolder).tv.setText(s);
        }
    }

    @Override
    public int getItemCount() {
        return Datalist.size();
    }
    public class FooterViewHolder extends RecyclerView.ViewHolder {

        public FooterViewHolder(View view) {
            super(view);
        }

    }
    public void isShowFooter(boolean showFooter) {
        this.mShowFooter = showFooter;
    }
    class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
        TextView tv;
        public ItemViewHolder(View itemView) {
            super(itemView);
            tv = (TextView) itemView.findViewById(R.id.tv);
            tv.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {

            if(mOnItemClickListtenet!=null){
                mOnItemClickListtenet.onItemClick(v,this.getPosition());
            }
        }
    }
    OnItemClickListtenet mOnItemClickListtenet;
    public interface OnItemClickListtenet{
        void onItemClick(View v ,int position);
    }

    public void setmOnItemClickListtenet(OnItemClickListtenet mOnItemClickListtenet) {
        this.mOnItemClickListtenet = mOnItemClickListtenet;
    }
}

底部layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/load_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="horizontal"
    android:paddingBottom="12dip"
    android:paddingTop="12dip" >

    <ProgressBar
        style="?android:attr/progressBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/more_data_msg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16sp"
        android:layout_marginLeft="10dp"
        android:text="正在加载..." />
</LinearLayout>



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值