Reclerview下拉刷新,上拉加载更多
2017-01-14 16:27
405 查看
MyCustomeActivity:
1.SwipeRefresh实现下拉刷新
2.添加ItemType为上拉加载更多添加footview,当到达尾部加载更多。
RefreshFootAdapter:
item_recycler_layout:
1.SwipeRefresh实现下拉刷新
2.添加ItemType为上拉加载更多添加footview,当到达尾部加载更多。
package com.marshalchen.ultimaterecyclerview.demo.aaMyCustome; import android.os.Bundle; import android.os.Handler; import android.support.annotation.Nullable; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.OrientationHelper; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.util.TypedValue; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.marshalchen.ultimaterecyclerview.demo.R; import java.util.ArrayList; import java.util.List; public class MyCustomeActivity extends AppCompatActivity { private LinearLayout top_bar_linear_back; private TextView top_bar_title; private SwipeRefreshLayout demo_swiperefreshlayout; private RecyclerView demo_recycler; private RefreshFootAdapter adapter; private LinearLayoutManager linearLayoutManager; private int lastVisibleItem; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_custome); Toast.makeText(getApplicationContext(),"this is a test!",Toast.LENGTH_LONG).show(); demo_swiperefreshlayout = (SwipeRefreshLayout) this.findViewById(R.id.swiperefresh); demo_recycler = (RecyclerView) this.findViewById(R.id.id_recyclerview); //设置刷新时动画的颜色,可以设置4个 demo_swiperefreshlayout.setProgressBackgroundColorSchemeResource(android.R.color.white); demo_swiperefreshlayout.setColorSchemeResources(android.R.color.holo_blue_light, android.R.color.holo_red_light, android.R.color.holo_orange_light, android.R.color.holo_green_light); demo_swiperefreshlayout.setProgressViewOffset(false, 0, (int) TypedValue .applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24, getResources() .getDisplayMetrics())); linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(OrientationHelper.VERTICAL); demo_recycler.setLayoutManager(linearLayoutManager); //添加分隔线 // demo_recycler.addItemDecoration(new AdvanceDecoration(this, OrientationHelper.VERTICAL)); demo_recycler.setAdapter(adapter = new RefreshFootAdapter(this)); demo_swiperefreshlayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { Log.d("zttjiangqq", "invoke onRefresh..."); new Handler().postDelayed(new Runnable() { @Override public void run () { List<String> newDatas = new ArrayList<String>(); for (int i = 0; i < 5; i++) { int index = i + 1; newDatas.add("new item" + index); } adapter.addItem(newDatas); demo_swiperefreshlayout.setRefreshing(false); Toast.makeText(MyCustomeActivity.this, "更新了五条数据...", Toast.LENGTH_SHORT).show(); } },5000); } }); demo_recycler.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (newState ==RecyclerView.SCROLL_STATE_IDLE && lastVisibleItem + 1 ==adapter.getItemCount()) { adapter.changeMoreStatus(RefreshFootAdapter.LOADING_MORE); new Handler().postDelayed(new Runnable() { @Override public void run() { List<String> newDatas = new ArrayList<String>(); for (int i = 0; i< 5; i++) { int index = i +1; newDatas.add("more item" + index); } adapter.addMoreItem(newDatas); adapter.changeMoreStatus(RefreshFootAdapter.PULLUP_LOAD_MORE); } }, 2500); } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView,dx, dy); lastVisibleItem =linearLayoutManager.findLastVisibleItemPosition(); } }); } class CustomOnClickListener implements View.OnClickListener { @Override public void onClick (View v){ MyCustomeActivity.this.finish(); } } }
RefreshFootAdapter:
package com.marshalchen.ultimaterecyclerview.demo.aaMyCustome; 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 com.marshalchen.ultimaterecyclerview.demo.R; import java.util.ArrayList; import java.util.List; /** * Created by liuqun on 2017/1/7. */ public class RefreshFootAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { //上拉加载更多 public static final int PULLUP_LOAD_MORE = 0; //正在加载中 public static final int LOADING_MORE = 1; //上拉加载更多状态-默认为0 private int load_more_status = 0; private LayoutInflater mInflater; private List<String> mTitles = null; private static final int TYPE_ITEM=0; //普通Item View private static final int TYPE_FOOTER=1; //顶部FootView public RefreshFootAdapter(Context context) { this.mInflater = LayoutInflater.from(context); this.mTitles = new ArrayList<String>(); for (int i = 0; i < 20; i++) { int index = i + 1; mTitles.add("item" + index); } } /** * item显示类型 * * @param parent * @param viewType * @return */ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //进行判断显示类型,来创建返回不同的View if (viewType == TYPE_ITEM) { View view = mInflater.inflate(R.layout.item_recycler_layout, parent, false); //这边可以做一些属性设置,甚至事件监听绑定 //view.setBackgroundColor(Color.RED); ItemViewHolder itemViewHolder = new ItemViewHolder(view); return itemViewHolder; } else if (viewType == TYPE_FOOTER) { View foot_view = mInflater.inflate(R.layout.recycler_load_more_layout, parent, false); //这边可以做一些属性设置,甚至事件监听绑定 //view.setBackgroundColor(Color.RED); FootViewHolder footViewHolder = new FootViewHolder(foot_view); return footViewHolder; } return null; } /** * 数据的绑定显示 * * @param holder * @param position */ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof ItemViewHolder) { ((ItemViewHolder) holder).item_tv.setText(mTitles.get(position)); holder.itemView.setTag(position); } else if (holder instanceof FootViewHolder) { FootViewHolder footViewHolder = (FootViewHolder) holder; switch (load_more_status) { case PULLUP_LOAD_MORE: footViewHolder.foot_view_item_tv.setText("上拉加载更多..."); break; case LOADING_MORE: footViewHolder.foot_view_item_tv.setText("正在加载更多数据..."); break; } } } /** * 进行判断是普通Item视图还是FootView视图 * * @param position * @return */ @Override public int getItemViewType(int position) { // 最后一个item设置为footerView if (position + 1 == getItemCount()) { return TYPE_FOOTER; } else { return TYPE_ITEM; } } @Override public int getItemCount() { return mTitles.size() + 1; } //自定义的ViewHolder,持有每个Item的的所有界面元素 public static class ItemViewHolder extends RecyclerView.ViewHolder { public TextView item_tv; public ItemViewHolder(View view) { super(view); item_tv = (TextView) view.findViewById(R.id.item_tv); } } /** * 底部FootView布局 */ public static class FootViewHolder extends RecyclerView.ViewHolder { private TextView foot_view_item_tv; public FootViewHolder(View view) { super(view); foot_view_item_tv = (TextView) view.findViewById(R.id.foot_view_item_tv); } } //添加数据 public void addItem(List<String> newDatas) { //mTitles.add(position, data); //notifyItemInserted(position); newDatas.addAll(mTitles); mTitles.removeAll(mTitles); mTitles.addAll(newDatas); notifyDataSetChanged(); } public void addMoreItem(List<String> newDatas) { mTitles.addAll(newDatas); notifyDataSetChanged(); } /** * //上拉加载更多 * PULLUP_LOAD_MORE=0; * //正在加载中 * LOADING_MORE=1; * //加载完成已经没有更多数据了 * NO_MORE_DATA=2; * * @param status */ public void changeMoreStatus(int status) { load_more_status = status; notifyDataSetChanged(); } }
item_recycler_layout:
<?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="wrap_content" android:background="@android:color/holo_green_light" > <TextView android:gravity="center" android:id="@+id/item_tv" android:textColor="@android:color/white" android:padding="5dp" android:textSize="16sp" android:text="Text数据显示..." android:layout_width="match_parent" android:layout_height="60dp" /> </LinearLayout>recycler_load_more_layout:
<?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:layout_width="fill_parent" android:layout_height="45dp" android:orientation="horizontal" android:gravity="center"> <ProgressBar android:layout_width="25dp" android:layout_height="25dp" /> <TextView android:id="@+id/foot_view_item_tv" android:layout_marginLeft="4dp" android:text="上拉加载更多..." android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout>
相关文章推荐
- 安卓开发-ListView侧拉菜单,置顶等仿QQ侧拉菜单侧拉点击切换图片,侧拉点击事件带上拉加载更多,下拉刷新
- Listview隐藏加载更多或者下拉刷新转动条的方法
- 使用SwipeRefreshLayout和RecyclerView实现仿“简书”下拉刷新和上拉加载更多
- 【微信小程序】转载:微信小程序实战篇-下拉刷新与加载更多
- 封装RecyclerViewAdapter实现RecyclerView下拉刷新上拉加载更多
- Android LRecyclerView实现下拉刷新,滑动到底部自动加载更多
- Android LRecyclerView实现下拉刷新,滑动到底部自动加载更多
- react-native 自定义 下拉刷新 / 上拉加载更多 组件
- Android ListView下拉刷新上拉自动加载更多DEMO示例
- 商城之热门商品列表实现(下拉刷新,上拉加载更多)
- 微信小程序开发之 下拉刷新,上拉加载更多
- Android实现RecyclerView的下拉刷新和上拉加载更多
- 用MaterialRefreshLayout实现下拉刷新 上拉加载更多
- 用Recyclerview实现列表分组、下拉刷新以及上拉加载更多
- android 超牛逼Listview滑动删除等菜单+下拉刷新加载更多
- appcan实现下拉刷新,上拉加载更多。
- IOS-给UIScrollView(包括继承它的UITableView、UICollectionView)添加下拉刷新-上拉加载更多
- android之ListView上拉加载更多和下拉刷新
- recyclerview+swiperefreshlayout实现GridView下拉刷新,上拉加载更多
- android 下拉刷新上拉加载更多,高仿ios左滑动删除item,解决了众多手势问题