本文主要是介绍Reclerview下拉刷新,上拉加载更多,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
MyCustomeActivity: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;@Overrideprotected 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() {@Overridepublic void onRefresh() {Log.d("zttjiangqq", "invoke onRefresh...");new Handler().postDelayed(new Runnable() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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);}}@Overridepublic void onScrolled(RecyclerView recyclerView, int dx, int dy) {super.onScrolled(recyclerView,dx, dy);lastVisibleItem =linearLayoutManager.findLastVisibleItemPosition();}});}class CustomOnClickListener implements View.OnClickListener {@Overridepublic 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;//上拉加载更多状态-默认为0private int load_more_status = 0;private LayoutInflater mInflater;private List<String> mTitles = null;private static final int TYPE_ITEM=0; //普通Item Viewprivate static final int TYPE_FOOTER=1; //顶部FootViewpublic 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) {//进行判断显示类型,来创建返回不同的Viewif (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*/@Overridepublic int getItemViewType(int position) {// 最后一个item设置为footerViewif (position + 1 == getItemCount()) {return TYPE_FOOTER;} else {return TYPE_ITEM;}}@Overridepublic 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"><TextViewandroid: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"><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="45dp"android:orientation="horizontal"android:gravity="center"><ProgressBarandroid:layout_width="25dp"android:layout_height="25dp"/><TextViewandroid:id="@+id/foot_view_item_tv"android:layout_marginLeft="4dp"android:text="上拉加载更多..."android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout>
</LinearLayout>
这篇关于Reclerview下拉刷新,上拉加载更多的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!