1.配置

//下拉刷新,上拉加载更多
api 'com.cjj.materialrefeshlayout:library:1.3.0'

2.先上项目图

 

3. DividerItemDecoration

public class DividerItemDecoration extends RecyclerView.ItemDecoration { 
 
    private static final int[] ATTRS = new int[]{ 
            android.R.attr.listDivider 
    }; 
 
    public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL; 
 
    public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL; 
 
    private Drawable mDivider; 
 
    private int mOrientation; 
 
    public DividerItemDecoration(Context context, int orientation) { 
        final TypedArray a = context.obtainStyledAttributes(ATTRS); 
        mDivider = a.getDrawable(0); 
        a.recycle(); 
        setOrientation(orientation); 
    } 
 
    public void setOrientation(int orientation) { 
        if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) { 
            throw new IllegalArgumentException("invalid orientation"); 
        } 
        mOrientation = orientation; 
    } 
 
    @Override 
    public void onDraw(Canvas c, RecyclerView parent) { 
//        Log.v("recyclerview - itemdecoration", "onDraw()"); 
 
        if (mOrientation == VERTICAL_LIST) { 
            drawVertical(c, parent); 
        } else { 
            drawHorizontal(c, parent); 
        } 
 
    } 
 
    public void drawVertical(Canvas c, RecyclerView parent) { 
        final int left = parent.getPaddingLeft(); 
        final int right = parent.getWidth() - parent.getPaddingRight(); 
 
        final int childCount = parent.getChildCount(); 
        for (int i = 0; i < childCount; i++) { 
            final View child = parent.getChildAt(i); 
            android.support.v7.widget.RecyclerView v = new android.support.v7.widget.RecyclerView(parent.getContext()); 
            final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child 
                    .getLayoutParams(); 
            final int top = child.getBottom() + params.bottomMargin; 
            final int bottom = top + mDivider.getIntrinsicHeight(); 
            mDivider.setBounds(left, top, right, bottom); 
            mDivider.draw(c); 
        } 
    } 
 
    public void drawHorizontal(Canvas c, RecyclerView parent) { 
        final int top = parent.getPaddingTop(); 
        final int bottom = parent.getHeight() - parent.getPaddingBottom(); 
 
        final int childCount = parent.getChildCount(); 
        for (int i = 0; i < childCount; i++) { 
            final View child = parent.getChildAt(i); 
            final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child 
                    .getLayoutParams(); 
            final int left = child.getRight() + params.rightMargin; 
            final int right = left + mDivider.getIntrinsicHeight(); 
            mDivider.setBounds(left, top, right, bottom); 
            mDivider.draw(c); 
        } 
    } 
 
    @Override 
    public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) { 
        if (mOrientation == VERTICAL_LIST) { 
            outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); 
        } else { 
            outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); 
        } 
    } 
}
MainActivity
public class MainActivity extends AppCompatActivity { 
    private OkHttpHelper httpHelper  =OkHttpHelper.getInstance(); 
    private SwipeRefreshLayout swipeRefreshLayout; 
    @ViewInject(R.id.tv) 
    private TextView tv; 
 
    private RecyclerView mRecyclerView; 
    private ArrayList<String> mDatas=new ArrayList<>(); 
    private MaterialRefreshLayout materialRefreshLayout; 
 
    private static final int STATE_NORMAL=0; 
    private static final int STATE_REFRESH=1; 
    private static final int STATE_MORE=2; 
    private int state = STATE_NORMAL; 
    private List<PayBean.Data> mData; 
 
    private int page=1; 
    private int pagesize=20; 
    private int totalpages=0; 
    private PayAdapter payAdapter; 
    private static final String TAG = "MainActivity"; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
 
        mRecyclerView = findViewById(R.id.recycleview); 
        materialRefreshLayout =findViewById(R.id.refresh); 
 
 
        initRefreshLayout(); 
        getData(); 
 
    } 
 
 
    private void initRefreshLayout(){ 
        materialRefreshLayout.setLoadMore(true); 
        materialRefreshLayout.setMaterialRefreshListener(new MaterialRefreshListener() { 
            @Override 
            public void onRefresh(MaterialRefreshLayout materialRefreshLayout) { 
                refreshData(); 
            } 
 
            @Override 
            public void onRefreshLoadMore(MaterialRefreshLayout materialRefreshLayout) { 
                if(page<=totalpages){ 
                    loadMoreData(); 
                }else{ 
                    Toast.makeText(MyApplication.getContext(),"没有更多内容了",Toast.LENGTH_SHORT).show(); 
                    materialRefreshLayout.finishRefreshLoadMore(); 
                } 
            } 
        }); 
    } 
 
    private void loadMoreData(){ 
        page=++page; 
         
        state=STATE_MORE; 
        getData(); 
    } 
 
    private void refreshData(){ 
        page=1; 
        state=STATE_REFRESH; 
        getData(); 
    } 
 
    private void getData(){ 
        String url=Api.BASE_URL+"&page="+page+"&pagesize="+pagesize; 
        httpHelper.get(url, new BaseHttpCallback() { 
            @Override 
            public void onRequestBefore(Request request) { 
 
            } 
 
            @Override 
            public void onSuccess(Response response, String string) { 
                PayBean payBean =JSON.parseObject(string,PayBean.class); 
 
                page= payBean.getPageindex(); 
                totalpages =payBean.getTotalpages(); 
                mData = payBean.getData(); 
 
                showData(); 
 
            } 
 
            @Override 
            public void onError(Response response, int code, Exception e) { 
 
            } 
 
            @Override 
            public void onFailure(Exception e) { 
 
            } 
        }); 
    } 
 
    private void showData(){ 
 
        switch (state){ 
            case STATE_NORMAL: 
                payAdapter = new PayAdapter(mData); 
                mRecyclerView.setAdapter(payAdapter); 
                mRecyclerView.setLayoutManager(new LinearLayoutManager(MyApplication.getContext())); 
                break; 
            case STATE_REFRESH: 
                payAdapter.clearData(); 
                payAdapter.addData(0,mData); 
                mRecyclerView.scrollToPosition(0); 
                materialRefreshLayout.finishRefresh(); 
                break; 
            case STATE_MORE: 
                payAdapter.addData(payAdapter.getmData().size(),mData); 
                mRecyclerView.scrollToPosition(payAdapter.getmData().size()); 
                materialRefreshLayout.finishRefreshLoadMore(); 
                break; 
            default: 
                break; 
        } 
 
    } 
 
}
MyApplication
public class MyApplication  extends Application{ 
    private static Context context; 
 
    @Override 
    public void onCreate() { 
        super.onCreate(); 
        Fresco.initialize(this); 
        context =this; 
    } 
    public static Context getContext(){ 
        return context; 
    } 
}
PayAdapter
public class PayAdapter extends RecyclerView.Adapter<PayAdapter.ViewHolder> { 
 
 
    private List<PayBean.Data> mData; 
    public OnItemClickListener mListener; 
    public void setOnItemClickListener(OnItemClickListener listener){ 
        mListener=listener; 
    } 
 
    public PayAdapter(List<PayBean.Data> data){ 
        mData=data; 
    } 
 
    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.view_rv_item,null,false); 
        ViewHolder viewHolder = new ViewHolder(view); 
        return viewHolder; 
    } 
 
    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
        PayBean.Data payBean=mData.get(position); 
        holder.tv_id.setText(payBean.getId()); 
        holder.tv_openid.setText(payBean.getOpenid()); 
    } 
 
    @Override 
    public int getItemCount() { 
        if(mData!=null && mData.size()>0){ 
            return mData.size(); 
        } 
        return 0; 
    } 
 
 
    class ViewHolder extends RecyclerView.ViewHolder{ 
 
        TextView tv_id; 
        TextView tv_openid; 
        LinearLayout item_layout; 
 
        public ViewHolder(View itemView) { 
            super(itemView); 
 
            tv_id =(TextView) itemView.findViewById(R.id.tv_id); 
            tv_openid =(TextView) itemView.findViewById(R.id.tv_openid); 
 
 
 
        } 
    } 
 
    public List<PayBean.Data> getmData() { 
        return mData; 
    } 
 
    public interface OnItemClickListener{ 
        void OnClick(View view,int position,int id); 
    } 
 
    public void clearData(){ 
        if(mData.size()>0 && mData!=null){ 
            int presize= mData.size(); 
            mData.clear(); 
            notifyItemRangeRemoved(0,presize); 
        } 
    } 
 
 
 
    public void addData(int position,List<PayBean.Data> datas){ 
        if (datas!=null && datas.size()>0){ 
            mData.addAll(datas); 
            notifyItemRangeInserted(position,mData.size()); 
        } 
    } 
 
    public void removeData(){ 
 
    } 
 
}
public class PayBean { 
 
    public String result; 
    public int pageindex; 
    public int pagesize; 
    public int totalrows; 
    public int totalpages; 
    public List<Data> data; 
 
    public class Data { 
        public String id; 
        public String openid; 
 
        public String getId() { 
            return id; 
        } 
 
        public String getOpenid() { 
            return openid; 
        } 
 
    } 
 
    public int getTotalrows() { 
        return totalrows; 
    } 
 
    public int getPageindex() { 
        return pageindex; 
    } 
 
    public String getResult() { 
        return result; 
    } 
 
    public List<Data> getData() { 
        return data; 
    } 
 
    public int getTotalpages() { 
        return totalpages; 
    } 
    public int getPagesize() { 
        return pagesize; 
    } 
 
 
}

main_activity

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:fresco="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    > 
 
    <com.cjj.MaterialRefreshLayout 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        xmlns:app="http://schemas.android.com/apk/res-auto" 
        android:id="@+id/refresh" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        app:wave_height_type="normal" 
        app:isLoadMore="true" 
        app:overlay="true" 
        app:wave_show="true" 
        > 
        <android.support.v7.widget.RecyclerView 
            android:id="@+id/recycleview" 
            android:scrollbars="vertical" 
            android:layout_width="match_parent" 
            android:layout_height="match_parent"/> 
 
    </com.cjj.MaterialRefreshLayout> 
 
 
 
    <TextView 
        android:id="@+id/tv" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" /> 
</LinearLayout>

layout_item

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="45dp"> 
 
    <LinearLayout 
        android:id="@+id/item_layout" 
        android:orientation="horizontal" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"> 
        <TextView 
            android:id="@+id/tv_id" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            /> 
        <TextView 
            android:id="@+id/tv_openid" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" /> 
    </LinearLayout> 
 
 
 
 
</LinearLayout>
public class Api { 
    public static final String BASE_URL="xxxxx"; 
 
}
弄一个可以传page和pagesize的api测试即可

 

遇到的问题,adapter清空的时候,要执行

notifyItemRangeRemoved(0,presize);

 否则会报错,一个坑把。

比较全面的一个例子了

发布评论

分享到:

IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

安卓下拉刷新空间SwipeRefreshLayout的基本使用讲解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。