上拉加载和下拉刷新方法,SDK20 以上自带的

xml文件

 <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/salses_charts_list_swip"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/sales_charts_listview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scrollbars="vertical" />

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

java activity 中
第一步:
  <span style="white-space:pre">	</span>mRecyclerView = (RecyclerView) findViewById(R.id.sales_charts_listview);
        mRecyclerView.setLayoutManager(mLinearLayoutManager = new LinearLayoutManager(this));
        swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.salses_charts_list_swip);

第二步:

swipeRefreshLayout进行设置

     <span style="white-space:pre">	</span>swipeRefreshLayout.setColorSchemeResources(R.color.white);//加载圈的颜色
        swipeRefreshLayout.setSize(SwipeRefreshLayout.LARGE);//加载圈的大小
        swipeRefreshLayout.setProgressBackgroundColorSchemeResource(R.color.c1);//加载圈的背景颜色
        swipeRefreshLayout.setRefreshing(false);//现在是否可以刷新<pre name="code" class="java"><span style="white-space:pre">	</span>adapter.setHasMoreData(true);//对adapter中的上拉加载的状态进行设置

 方法的使用 

 <span style="white-space:pre">	</span>getDatabByIndex(currentPage);//初始化加载数据

        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                swipeRefreshLayout.setRefreshing(true);//设置刷新的动画出现
                currentPage = 1;
                getDatabByIndex(currentPage);//刷新<span style="font-family: Arial, Helvetica, sans-serif;">加载数据</span>
            }
        });
        swipeRefreshLayout.setRefreshing(true);
        mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                isPullUp = dy > 0;
            }

            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                if (isPullUp && !isRefreshing) {//<span style="font-family: Arial, Helvetica, sans-serif;">isPullUp 是否列表到最下面了,</span><span style="font-family: Arial, Helvetica, sans-serif;">isRefreshing 是否还有数据可以刷新;</span><span style="font-family: Arial, Helvetica, sans-serif;">
</span>                    int lastPos = mLinearLayoutManager.findLastVisibleItemPosition();
                    if (lastPos > dataList.size() - 2) {//最后一个位置的时候加载更多
                        adapter.setHasFooter(true);
                        isRefreshing = true;
                        currentPage++;
                        getDatabByIndex(currentPage);<span style="font-family: Arial, Helvetica, sans-serif;">//刷新</span><span style="font-family: Arial, Helvetica, sans-serif;">加载数据</span>
                    }
                }
            }
        });

adapter中

package com.ybzf.mobile.pharmacist.adapter;

import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import android.widget.Toast;

import com.ybzf.mobile.pharmacist.R;
import com.ybzf.mobile.pharmacist.activity.myIncome.SalesChartsActivity;
import com.ybzf.mobile.pharmacist.config.AppConstants;
import com.ybzf.mobile.pharmacist.model.entities.MissionListItem;
import com.ybzf.mobile.pharmacist.model.entities.SalesChartsListItem;
import com.ybzf.mobile.pharmacist.views.MaterialProgressBarSupport;
import com.ybzf.mobile.pharmacist.widget.MissionListViewHolder;
import com.ybzf.mobile.pharmacist.widget.SalesChartsViewHodler;

import java.text.DecimalFormat;
import java.util.List;

/**
 * Created by Lampo on 2015/10/21.
 */
public class MissionListAdapter extends RecyclerView.Adapter {
    private Context context;
    private List<MissionListItem> dataList;
    private static final int TYPE_FOOTER = Integer.MIN_VALUE + 1;
    private boolean hasFooter;
    private boolean hasMoreData;

    public MissionListAdapter(Context context, List<MissionListItem> dataList) {
        this.context = context;
        this.dataList = dataList;
    }

    public class FooterViewHolder extends RecyclerView.ViewHolder {
        public final <a target=_blank href="http://blog.csdn.net/error/404.html?from=http%3a%2f%2fblog.csdn.net%2fu014434239%2farticle%2fdetails%2f50428569" target="_blank">MaterialProgressBarSupport</a> mProgressView;
        public final TextView mTextView;

        public FooterViewHolder(View view) {
            super(view);
            mProgressView = (MaterialProgressBarSupport) view.findViewById(R.id.progress_view);
            mTextView = (TextView) view.findViewById(R.id.tv_content);
        }
    }

    public MissionListItem getValueAt(int position) {
        return dataList.get(position);
    }


    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == TYPE_FOOTER) {
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.item_view_load_more, parent, false);
            return new FooterViewHolder(view);
        } else {
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.item_missionlist, parent, false);
            return new MissionListViewHolder(view);
        }
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof MissionListViewHolder) {//在<span style="font-family: Arial, Helvetica, sans-serif;">MissionListViewHolder类中做具体的数据处理</span>

            ((MissionListViewHolder) holder).initBySalesChartsList(context, getValueAt(position), position);
        } else {
            //没有更多数据
            if (hasMoreData) {
                ((FooterViewHolder) holder).mProgressView.setVisibility(View.VISIBLE);
                ((FooterViewHolder) holder).mProgressView.startProgress();
                ((FooterViewHolder) holder).mTextView.setText("加载中…");
            } else {
                ((FooterViewHolder) holder).mProgressView.stopProgress();
                ((FooterViewHolder) holder).mProgressView.setVisibility(View.GONE);
                ((FooterViewHolder) holder).mTextView.setText("没有更多数据了");
            }
        }
    }

    @Override
    public int getItemCount() {
        return dataList.size() + (hasFooter ? 1 : 0);
    }

    public int getBasicItemCount() {
        return dataList.size();
    }

    @Override
    public int getItemViewType(int position) {
        if (position == getBasicItemCount() && hasFooter) {
            return TYPE_FOOTER;
        }
        return super.getItemViewType(position);
    }

//    public boolean hasFooter() {
//        return hasFooter;
//    }

    public void setHasFooter(boolean hasFooter) {
        this.hasFooter = hasFooter;
        notifyDataSetChanged();
    }

    public boolean hasMoreData() {
        return hasMoreData;
    }

    public void setHasMoreData(boolean isMoreData) {
        if (this.hasMoreData != isMoreData) {
            this.hasMoreData = isMoreData;
            notifyDataSetChanged();
        }
    }

    public void setHasMoreDataAndFooter(boolean hasMoreData, boolean hasFooter) {
        this.hasMoreData = hasMoreData;
        this.hasFooter = hasFooter;
        notifyDataSetChanged();
    }
}
每次网络请求完成以后

     <span style="white-space:pre">		</span>adapter.setHasMoreDataAndFooter(true, true);
                isRefreshing = false;
                swipeRefreshLayout.setRefreshing(false);

这样就可以完成一个简单的上拉加载和下拉刷新

其中swipeRefreshLayout主要负责下拉刷新,而上拉加载由mRecyclerView

而且mRecyclerView有一点类似于ListView ,







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值