RecyclerView的使用以及下拉刷新自动加载(添加点击事件、头部)
来源:互联网 发布:xilinx mac 编辑:程序博客网 时间:2024/05/02 02:46
RecyclerView的使用完全解析:http://blog.csdn.net/lmj623565791/article/details/45059587;(鸿洋大神)
参照鸿洋大神写的一个demo,并给它加上了点击与长按事件以及添加头部布局:
我们都知道recyclerview没有自带上拉刷新的方法,所以用addOnScrollListener给它添加自动加载
/**上拉加载*/ LinearLayoutManager layoutManager = new LinearLayoutManager(getContext()); layoutManager.setOrientation(LinearLayoutManager.VERTICAL);// layoutManager.scrollToPosition(postion); mRecyclerView.setLayoutManager(layoutManager); mRecyclerView.addOnScrollListener(new EndlessRecyclerOnScrollListener(layoutManager) { @Override public void onLoadMore(int currentPage) { swipeRefresh = false;// 写加载过程 initData(); } });
自动加载接口
import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;/** * Created by Administrator on 2016/11/15. */public abstract class EndlessRecyclerOnScrollListener extends RecyclerView.OnScrollListener { private int previousTotal = 0; private boolean loading = true; int firstVisibleItem, visibleItemCount, totalItemCount; private int currentPage = 1; private LinearLayoutManager mLinearLayoutManager; public EndlessRecyclerOnScrollListener( 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) { if (totalItemCount > previousTotal) { loading = false; previousTotal = totalItemCount; } } if (!loading && (totalItemCount - visibleItemCount) <= firstVisibleItem) { currentPage++; onLoadMore(currentPage); loading = true; } } public abstract void onLoadMore(int currentPage);}
然后就是正常使用了
public class HomepageAdapter extends RecyclerView.Adapter<HomepageAdapter.MyViewHolder> { public interface OnItemClickLitener { void onItemClick(View view, int position); void onItemLongClick(View view, int position); } public static final int TYPE_HEADER = 0;//没有头部布局 public static final int TYPE_NORMAL = 1;//有一个头部布局 public View mHeaderView; public List<Bean.ResultBean.DataBean> mDatas; public OnItemClickLitener mOnItemClickLitener; public Context context; public HomepageAdapter(Context context, List<Bean.ResultBean.DataBean> mDatas) { this.context = context; this.mDatas = mDatas; } public void setHeaderView(View headerView) { mHeaderView = headerView; notifyItemInserted(0); } public void addDatas(List<Bean.ResultBean.DataBean> datas) { mDatas.addAll(datas); notifyDataSetChanged(); } public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener) { this.mOnItemClickLitener = mOnItemClickLitener; } @Override public int getItemViewType(int position) { if (mHeaderView == null) return TYPE_NORMAL; if (position == 0) return TYPE_HEADER; return TYPE_NORMAL; } public int getRealPosition(RecyclerView.ViewHolder holder) { int position = holder.getLayoutPosition(); return mHeaderView == null ? position : position - 1; } @Override public void onBindViewHolder(final MyViewHolder holder, final int position) { if (getItemViewType(position) == TYPE_HEADER) return; final int pos = getRealPosition(holder); Bean.ResultBean.DataBean bean = mDatas.get(pos); Picasso.with(context).load(bean.getThumbnail_pic_s()).placeholder(R.drawable.iv_loading).error(android.R.drawable.stat_notify_error).into(holder.ivheader); holder.tvtitle.setText(bean.getTitle()); holder.tvresuce.setText(bean.getRealtype()); holder.mtime.setText(bean.getDate()); // 如果设置了回调,则设置点击事件 if (mOnItemClickLitener != null) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int pos = holder.getLayoutPosition(); mOnItemClickLitener.onItemClick(holder.itemView, pos); } }); holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { int pos = holder.getLayoutPosition(); mOnItemClickLitener.onItemLongClick(holder.itemView, pos); return false; } }); } } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (mHeaderView != null && viewType == TYPE_HEADER) return new MyViewHolder(mHeaderView); View layout = LayoutInflater.from(parent.getContext()).inflate(R.layout.homepage_item, parent, false); return new MyViewHolder(layout); } @Override public int getItemCount() { return mHeaderView == null ? mDatas.size() : mDatas.size() + 1; } class MyViewHolder extends RecyclerView.ViewHolder { ImageView ivheader; TextView tvtitle, tvresuce, mtime; public MyViewHolder(View view) { super(view); ivheader = (ImageView) view.findViewById(R.id.iv_list); tvtitle = (TextView) view.findViewById(R.id.tv_title); tvresuce = (TextView) view.findViewById(R.id.tv_body); mtime = (TextView) view.findViewById(R.id.tv_time); } }}在Fragment中的使用
public class HomePageFragment extends Fragment { private RecyclerView mRecyclerView; private List<Bean.ResultBean.DataBean> mDatas; private HomepageAdapter mAdapter; private Bean bean; private RequestQueue queue; public static HomePageFragment newInstance(Context context, Bundle bundle) { HomePageFragment newFragment = new HomePageFragment(); newFragment.setArguments(bundle); return newFragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mRecyclerView = (RecyclerView) inflater.inflate(R.layout.fragment_homepage, container, false); initView(); initData(); return mRecyclerView; } protected void initView() { queue = Volley.newRequestQueue(getActivity()); mDatas = new ArrayList<>(); mAdapter = new HomepageAdapter(getContext(), mDatas); } protected void initData() { //网络请求与JSON解析 JsonObjectRequest request = new JsonObjectRequest(Url.INTENT_NEWS_URL, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Gson gson = new Gson(); bean = gson.fromJson(String.valueOf(response), Bean.class); mDatas.addAll(bean.getResult().getData()); mAdapter.notifyDataSetChanged(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Util.showLog("mylog", error.toString()); } }); queue.add(request); mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));//这里可以选择是listView还是GridView mRecyclerView.setAdapter(mAdapter = new HomepageAdapter(getContext(), mDatas));//或者是瀑布流(设置的高度 setHeader(mRecyclerView); mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(),//不能固定,并且得随机给item一个高度 DividerItemDecoration.VERTICAL_LIST)); mAdapter.setOnItemClickLitener(new HomepageAdapter.OnItemClickLitener() { @Override public void onItemClick(View view, int position) { Util.showToast(getContext(), position + "click"); Intent intent = new Intent(getActivity(), WebActivity.class); Bean.ResultBean.DataBean url = mDatas.get(position - 1); intent.putExtra("url", url.getUrl()); startActivity(intent); } @Override public void onItemLongClick(View view, int position) { Util.showToast(getContext(), position + "long click"); } }); } private void setHeader(RecyclerView view) { View header = LayoutInflater.from(getContext()).inflate(R.layout.activity_banner, view, false);//子布局 mAdapter.setHeaderView(header); }}
0 1
- RecyclerView的使用以及下拉刷新自动加载(添加点击事件、头部)
- RecyclerView使用详解一代替ListView(点击事件,添加头布局,上拉刷新下拉加载)
- 优雅地为RecyclerView加上头部、下拉刷新、自动加载
- recyclerview的数据刷新(下拉刷新和自动加载更多)以及添加提示语(例如:“数据已加载完毕”)
- RecyclerView的点击事件,下拉刷新,上拉加载(Android5.0)
- RecyclerView实现上拉刷新,下拉加载,item点击事件
- okhhtp + recyclerview + 上拉刷新下拉加载 + 点击事件
- Android实现RecyclerView自定义列表、点击事件以及下拉刷新
- Android实现RecyclerView自定义列表、点击事件以及下拉刷新
- RecyclerView原生的上拉加载与下拉刷新及点击监听事件
- RecyclerView基本用法(添加分割线,添加头尾布局,下拉刷新上拉加载,添加删除item,以及监听事件)
- XRecyclerView:实现下拉刷新、滚动到底部加载更多以及添加header功能的RecyclerView
- 上拉加载下拉刷新的RecyclerView可添加headerView
- RecyclerView 实现下拉刷新和自动加载
- RecyclerView 实现下拉刷新和自动加载
- RecyclerView 下拉刷新,自动加载更多
- Android-RecyclerView使用(三) 实现下拉刷新,上拉自动加载
- 一款下拉刷新以及上拉加载的控件库,扩展性强,使用简单。并附带有可以添加 header 和 footer 的 Recyclerview
- 数据结构顺序表应用
- Okhttp 3.X 当中 FormEncodingBuilder没有
- Maven的pom.xml介绍
- 图文混排Button
- 手机端wap站网页播放腾讯视频代码
- RecyclerView的使用以及下拉刷新自动加载(添加点击事件、头部)
- 云帮系列文章:产品设计思想
- POJ 1200 Crazy Search
- SAP webservice 接口
- js实现密码加密
- 学写makefile(《跟我一起写Makefile-陈皓》笔记)
- poj2965深搜+枚举
- sql优化-use index
- list!=null和list.size()>0