Reclerview下拉刷新,上拉加载更多
来源:互联网 发布:冬不拉教程软件 编辑:程序博客网 时间:2024/06/05 19:03
MyCustomeActivity:
1.SwipeRefresh实现下拉刷新
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>
0 0
- Reclerview下拉刷新,上拉加载更多
- Listview 下拉刷新,上拉加载更多
- 下拉刷新以及上拉加载更多
- 下拉刷新和上拉加载更多
- android 上拉刷新,下拉加载更多
- Listview下拉刷新上拉加载更多
- 下拉刷新,上拉加载更多 PullToRefresh
- 下拉刷新,上拉加载更多ListView
- ListView下拉刷新,上拉加载更多
- Ionic上拉刷新下拉加载更多
- 下拉刷新,上拉加载更多
- ListView下拉刷新上拉加载更多
- RecyclerView 下拉刷新上拉加载更多
- RecyclerView 下拉刷新上拉加载更多
- PullToRefreshListView上拉加载更多,下拉刷新
- RecyclerView 下拉刷新、上拉加载更多
- RecyclerView 下拉刷新上拉加载更多
- RecyclerView上拉刷新,下拉加载更多
- LQA: Time of day is written with a “dot” not a “colon” (13.14 not 13:14)
- AOP
- Eclipse 个人配置
- 搜索引擎“年底数据大更新”究竟持续多长时间?届时对那些网站造成严重影响?
- Codeforces 757B Bash's Big Day 【数论】
- Reclerview下拉刷新,上拉加载更多
- java基础--2.基本语法-1
- 手把手教你DIY一个春运迁徙图(一)
- Kibana using lots memory
- 尚硅谷java学习笔记——8.java泛型(Generic)
- Linux下配置jdk环境变量
- 从Zachman企业架构框架想到的
- 面试题c++
- webService学习(一)—— hello world