package com.example.administrator.recyclerview; 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 implements SwipeRefreshLayout.OnRefreshListener{ private RecyclerView recyclerView; private List<String>mDatas; private SimpleAdapter myAdapter; private SwipeRefreshLayout mRefreshLayout; private LinearLayoutManager mLinearLayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); initDatas(); //绑定适配器 myAdapter=new SimpleAdapter(this,mDatas); //为RecyclerView加载Adapter recyclerView.setAdapter(myAdapter); //设置RecyclerView的布局管理 LinearLayoutManager layoutManager=new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false); recyclerView.setLayoutManager(layoutManager); //设置RecyclerView的分割线 recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST)); //监听SwipeRefreshLayout.OnRefreshListener mRefreshLayout.setOnRefreshListener(this); mLinearLayoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(mLinearLayoutManager); /** * 监听addOnScrollListener这个方法,新建我们的EndLessOnScrollListener * 在onLoadMore方法中去完成上拉加载的操作 * */ recyclerView.addOnScrollListener(new EndLessOnScrollListener(mLinearLayoutManager) { @Override public void onLoadMore(int currentPage) { loadMoreData(); } }); } //初始化界面 private void initViews(){ recyclerView= (RecyclerView) findViewById(R.id.id_recyclerView); mRefreshLayout = (SwipeRefreshLayout)findViewById(R.id.layout_swipe_refresh); //这个是下拉刷新出现的那个圈圈要显示的颜色 mRefreshLayout.setColorSchemeResources( R.color.colorRed, R.color.colorYellow, R.color.colorGreen ); } //初始化一开始加载的数据 private void initDatas(){ mDatas=new ArrayList<String>(); for (int i=0; i<=10; i++){ /*mDatas.add(""+(char)i);*/ mDatas.add("Item"+i); } } //每次上拉加载的时候,就加载十条数据到RecyclerView中 private void loadMoreData(){ for (int i =0; i < 10; i++){ mDatas.add("嘿,我是“上拉加载”生出来"+i); myAdapter.notifyDataSetChanged(); mRefreshLayout.setRefreshing(false); } } /** * 重写SwipeRefreshLayout.OnRefreshListener的OnRefresh方法 * 在这里面去做下拉刷新的操作 */ @Override public void onRefresh() { updateData(); //数据重新加载完成后,提示数据发生改变,并且设置现在不在刷新 myAdapter.notifyDataSetChanged(); mRefreshLayout.setRefreshing(false); } private void updateData(){ //我在List最前面加入一条数据 mDatas.add(0, "嘿,我是“下拉出来的”"); }}
package com.example.administrator.recyclerview; /* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.View; /** * This class is from the v7 samples of the Android SDK. It's not by me! * <p/>分割线----工具类 * See the license above for details. */ 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) { 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); RecyclerView v = new 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); } } }package com.example.administrator.recyclerview; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; /** * 刷新工具类 * Created by Administrator on 2016/11/9 0009. */ public abstract class EndLessOnScrollListener extends RecyclerView.OnScrollListener{ //声明一个LinearLayoutManager private LinearLayoutManager mLinearLayoutManager; //当前页,从0开始 private int currentPage = 0; //已经加载出来的Item的数量 private int totalItemCount; //主要用来存储上一个totalItemCount private int previousTotal = 0; //在屏幕上可见的item数量 private int visibleItemCount; //在屏幕可见的Item中的第一个 private int firstVisibleItem; //是否正在上拉数据 private boolean loading = true; public EndLessOnScrollListener(LinearLayoutManager linearLayoutManager) { this.mLinearLayoutManager = linearLayoutManager; } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); visibleItemCount = recyclerView.getChildCount(); totalItemCount = mLinearLayoutManager.getItemCount(); firstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition(); if(loading){ Log.d("wnwn", "firstVisibleItem: " + firstVisibleItem); Log.d("wnwn","totalPageCount:" +totalItemCount); Log.d("wnwn", "visibleItemCount:" + visibleItemCount); if(totalItemCount > previousTotal){ //说明数据已经加载结束 loading = false; previousTotal = totalItemCount; } } //这里需要好好理解 if (!loading && totalItemCount-visibleItemCount <= firstVisibleItem){ currentPage ++; onLoadMore(currentPage); loading = true; } } /** * 提供一个抽闲方法,在Activity中监听到这个EndLessOnScrollListener * 并且实现这个方法 * */ public abstract void onLoadMore(int currentPage); }package com.example.administrator.recyclerview; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.ArrayList; import java.util.List; /** * 适配器 * Created by Administrator on 2016/11/8 0008. */public class SimpleAdapter extends RecyclerView.Adapter<MyViewHolder> { private LayoutInflater layoutInflater; private Context context; private List<String>mDatas; SimpleAdapter(Context context, List<String> datas){ this.context=context; this.mDatas=datas; layoutInflater=LayoutInflater.from(context); } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view=layoutInflater.inflate(R.layout.item_main,parent,false); MyViewHolder myViewHolder=new MyViewHolder(view); return myViewHolder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.tv.setText(mDatas.get(position)); } @Override public int getItemCount() { return mDatas==null?0:mDatas.size(); } } class MyViewHolder extends RecyclerView.ViewHolder{ TextView tv; public MyViewHolder(View itemView) { super(itemView); tv= (TextView) itemView.findViewById(R.id.text); } }
RecyclerView上啦刷新下拉加载
最新推荐文章于 2023-06-05 20:53:34 发布