RecyclerView 刷新+加载
来源:互联网 发布:淘宝神器返利是真的吗 编辑:程序博客网 时间:2024/06/01 10:39
<?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="mvpframework.bwie.com.a1509arvdemo.MainActivity"><android.support.v4.widget.SwipeRefreshLayout android:id="@+id/srl" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/rv" android:layout_width="match_parent" android:layout_height="match_parent" /></android.support.v4.widget.SwipeRefreshLayout></LinearLayout>
item布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/ll"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><TextView android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="40dp" android:background="#330000ff" android:gravity="center" /></LinearLayout>import android.os.Bundle; import android.os.Handler; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.widget.Toast; import java.util.ArrayList; import java.util.List;public class MainActivity extends AppCompatActivity { private RecyclerView mRv; private List<String> list = new ArrayList<>(); private SwipeRefreshLayout mSrl; private MyAdapter myAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); //给rv设置布局管理器 //仿listview// LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); //仿GridView GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3); //瀑布流 StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL); mRv.setLayoutManager(gridLayoutManager); //添加分割线 mRv.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));// mRv.addItemDecoration(new DividerGridItemDecoration(this)); //设置适配器 for (int i = 0; i < 50; i++) { list.add("Item" + i); } //创建适配器 myAdapter = new MyAdapter(MainActivity.this, list); mRv.setAdapter(myAdapter); myAdapter.setOnItemListener(new MyAdapter.OnItemListener() { @Override public void onItemClick(String str) { Toast.makeText(MainActivity.this, "点击:" + str, Toast.LENGTH_SHORT).show(); } @Override public void onItemLongClick(String str) { Toast.makeText(MainActivity.this, "长按" + str, Toast.LENGTH_SHORT).show(); } }); } private void initView() { mRv = (RecyclerView) findViewById(R.id.rv); mSrl = (SwipeRefreshLayout) findViewById(R.id.srl); //给SwipeRefreshLayout设置下拉监听 mSrl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { //模拟耗时操作 new Handler().postDelayed(new Runnable() { @Override public void run() { //停止刷新 mSrl.setRefreshing(false); Toast.makeText(MainActivity.this, "刷新成功", Toast.LENGTH_SHORT).show(); } }, 3000); } }); mRv.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { if (newState == RecyclerView.SCROLL_STATE_IDLE) { LinearLayoutManager lm = (LinearLayoutManager) mRv.getLayoutManager(); if (lm.findLastVisibleItemPosition() == list.size() - 1) { List<String> moreList = new ArrayList<String>(); for (int i = 0; i < 10; i++) { moreList.add("新添加的数据" + i); } myAdapter.addMore(moreList); } } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); } }); }}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.LinearLayout; import android.widget.TextView; import java.util.List;/** * Created by peng on 2017/11/10. */public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private Context context; private List<String> list; //2、定义一个属性 private OnItemListener onItemListener; /** * 1、定义一个接口 */ public interface OnItemListener { public void onItemClick(String str); public void onItemLongClick(String str); } //3、定义一个方法 public void setOnItemListener(OnItemListener onItemListener) { this.onItemListener = onItemListener; } public MyAdapter(Context context, List<String> list) { this.context = context; this.list = list; } //1、RecyclerView.Adapter中哪个方法用来展现视图和它的持有者: @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //加载写好的item布局 View view = LayoutInflater.from(context).inflate(R.layout.item, parent, false); return new MyViewHolder1(view); } //3、在RecyclerView中负责绑定数据的方法是 @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { //获取数据 final String s = list.get(position); MyViewHolder1 myViewHolder1 = (MyViewHolder1) holder; myViewHolder1.tv.setText(s); //给布局设置一个点击和长按时间 myViewHolder1.ll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onItemListener.onItemClick(s); } }); myViewHolder1.ll.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { onItemListener.onItemLongClick(s); return true; } }); } //RecyclerView返回数据条目数的方法是 @Override public int getItemCount() { return list.size(); } //2、第二个要走的方法 class MyViewHolder1 extends RecyclerView.ViewHolder { private TextView tv; private LinearLayout ll; public MyViewHolder1(View itemView) { super(itemView); //查找布局里,要显示数据的组件 tv = itemView.findViewById(R.id.tv); ll = itemView.findViewById(R.id.ll); } } /** * 添加更多的方法 * * @param moreList */ public void addMore(List<String> moreList) { list.addAll(moreList); notifyDataSetChanged(); }}DividerGridItemDecoration
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.GridLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.RecyclerView.LayoutManager;import android.support.v7.widget.RecyclerView.State;import android.support.v7.widget.StaggeredGridLayoutManager;import android.view.View;/** * * @author zhy * */public class DividerGridItemDecoration extends RecyclerView.ItemDecoration{ private static final int[] ATTRS = new int[] { android.R.attr.listDivider }; private Drawable mDivider; public DividerGridItemDecoration(Context context) { final TypedArray a = context.obtainStyledAttributes(ATTRS); mDivider = a.getDrawable(0); a.recycle(); } @Override public void onDraw(Canvas c, RecyclerView parent, State state) { drawHorizontal(c, parent); drawVertical(c, parent); } private int getSpanCount(RecyclerView parent) { // 列数 int spanCount = -1; LayoutManager layoutManager = parent.getLayoutManager(); if (layoutManager instanceof GridLayoutManager) { spanCount = ((GridLayoutManager) layoutManager).getSpanCount(); } else if (layoutManager instanceof StaggeredGridLayoutManager) { spanCount = ((StaggeredGridLayoutManager) layoutManager) .getSpanCount(); } return spanCount; } public void drawHorizontal(Canvas c, RecyclerView parent) { 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.getLeft() - params.leftMargin; final int right = child.getRight() + params.rightMargin + mDivider.getIntrinsicWidth(); final int top = child.getBottom() + params.bottomMargin; final int bottom = top + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } public void drawVertical(Canvas c, RecyclerView parent) { 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 top = child.getTop() - params.topMargin; final int bottom = child.getBottom() + params.bottomMargin; final int left = child.getRight() + params.rightMargin; final int right = left + mDivider.getIntrinsicWidth(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } private boolean isLastColum(RecyclerView parent, int pos, int spanCount, int childCount) { LayoutManager layoutManager = parent.getLayoutManager(); if (layoutManager instanceof GridLayoutManager) { if ((pos + 1) % spanCount == 0){// 如果是最后一列,则不需要绘制右边 return true; } } else if (layoutManager instanceof StaggeredGridLayoutManager) { int orientation = ((StaggeredGridLayoutManager) layoutManager) .getOrientation(); if (orientation == StaggeredGridLayoutManager.VERTICAL) { if ((pos + 1) % spanCount == 0){// 如果是最后一列,则不需要绘制右边 return true; } } else { childCount = childCount - childCount % spanCount; if (pos >= childCount)// 如果是最后一列,则不需要绘制右边 return true; } } return false; } private boolean isLastRaw(RecyclerView parent, int pos, int spanCount, int childCount) { LayoutManager layoutManager = parent.getLayoutManager(); if (layoutManager instanceof GridLayoutManager) { childCount = childCount - childCount % spanCount; if (pos >= childCount)// 如果是最后一行,则不需要绘制底部 return true; } else if (layoutManager instanceof StaggeredGridLayoutManager) { int orientation = ((StaggeredGridLayoutManager) layoutManager) .getOrientation(); // StaggeredGridLayoutManager 且纵向滚动 if (orientation == StaggeredGridLayoutManager.VERTICAL) { childCount = childCount - childCount % spanCount; // 如果是最后一行,则不需要绘制底部 if (pos >= childCount) return true; } else{// StaggeredGridLayoutManager 且横向滚动 // 如果是最后一行,则不需要绘制底部 if ((pos + 1) % spanCount == 0) { return true; } } } return false; } @Override public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) { int spanCount = getSpanCount(parent); int childCount = parent.getAdapter().getItemCount(); if (isLastRaw(parent, itemPosition, spanCount, childCount)){// 如果是最后一行,则不需要绘制底部 outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); } else if (isLastColum(parent, itemPosition, spanCount, childCount)){// 如果是最后一列,则不需要绘制右边 outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); } else { outRect.set(0, 0, mDivider.getIntrinsicWidth(),mDivider.getIntrinsicHeight()); } }}
阅读全文
0 0
- RecyclerView+OkHttp加载刷新
- RecyclerView的刷新加载
- RecyclerView刷新加载
- RecyclerView 刷新+加载
- RecyclerView解决加载和刷新
- RecyclerView刷新与加载更多
- RecyclerView刷新加载库-SRecyclerView
- RecyclerView实现上拉加载,下拉刷新
- RecyclerView 下拉刷新上拉加载更多
- RecyclerView的刷新和加载--XRecyclerView
- RecyclerView实现上拉加载,下拉刷新
- RecyclerView 实现下拉刷新和自动加载
- RecyclerView下拉刷新和加载更多
- RecyclerView 下拉刷新上拉加载更多
- RecyclerView的上拉加载,下拉刷新
- RecyclerView 下拉刷新和上拉加载
- RecyclerView下拉刷新上拉加载
- RecyclerView 实现下拉刷新和自动加载
- HTML
- centos7 虚拟机 连不上网 解决办法 win10 32位操作系统
- MyBatis(二)对表执行CRUD操作
- 基于51单片机的简单方波发生器
- 6.6
- RecyclerView 刷新+加载
- 笨办法学python习题20 函数和文件
- 习题6(6.3)
- [SDUT](2136)数据结构实验之二叉树的建立与遍历 ---- 二叉树
- Ubuntu下Tensorflow加载MNIST数据集(数据下载和读取)
- 图的遍历(广度优先搜索)
- 数组
- CCPC杭州站总结
- Week9 H-IN