zoukankan      html  css  js  c++  java
  • Android为TV端助力 转载:RecyclerView分页加载

    package com.android.ryane.pulltoloaddata_recyclerview;

    import android.os.Handler;
    import android.os.Looper;
    import android.support.v4.widget.SwipeRefreshLayout;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v7.widget.DefaultItemAnimator;
    import android.support.v7.widget.GridLayoutManager;
    import android.support.v7.widget.RecyclerView;

    import java.util.ArrayList;
    import java.util.List;

    public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {
    private SwipeRefreshLayout refreshLayout;
    private RecyclerView recyclerView;
    private List<String> list;

    private int lastVisibleItem = 0;
    private final int PAGE_COUNT = 10;
    private GridLayoutManager mLayoutManager;
    private MyAdapter adapter;
    private Handler mHandler = new Handler(Looper.getMainLooper());

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    initData();
    findView();
    initRefreshLayout();
    initRecyclerView();
    }

    private void initData() {
    list = new ArrayList<>();
    for (int i = 1; i <= 40; i++) {
    list.add("条目" + i);
    }
    }


    private void findView() {
    refreshLayout = (SwipeRefreshLayout) findViewById(R.id.refreshLayout);
    recyclerView = (RecyclerView) findViewById(R.id.recyclerView);

    }

    private void initRefreshLayout() {
    refreshLayout.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);
    refreshLayout.setOnRefreshListener(this);
    }

    private void initRecyclerView() {
    adapter = new MyAdapter(getDatas(0, PAGE_COUNT), this, getDatas(0, PAGE_COUNT).size() > 0 ? true : false);
    mLayoutManager = new GridLayoutManager(this, 1);
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.setAdapter(adapter);
    recyclerView.setItemAnimator(new DefaultItemAnimator());

    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
    super.onScrollStateChanged(recyclerView, newState);
    if (newState == RecyclerView.SCROLL_STATE_IDLE) {
    if (adapter.isFadeTips() == false && lastVisibleItem + 1 == adapter.getItemCount()) {
    mHandler.postDelayed(new Runnable() {
    @Override
    public void run() {
    updateRecyclerView(adapter.getRealLastPosition(), adapter.getRealLastPosition() + PAGE_COUNT);
    }
    }, 500);
    }

    if (adapter.isFadeTips() == true && lastVisibleItem + 2 == adapter.getItemCount()) {
    mHandler.postDelayed(new Runnable() {
    @Override
    public void run() {
    updateRecyclerView(adapter.getRealLastPosition(), adapter.getRealLastPosition() + PAGE_COUNT);
    }
    }, 500);
    }
    }
    }

    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
    super.onScrolled(recyclerView, dx, dy);
    lastVisibleItem = mLayoutManager.findLastVisibleItemPosition();
    }
    });
    }

    private List<String> getDatas(final int firstIndex, final int lastIndex) {
    List<String> resList = new ArrayList<>();
    for (int i = firstIndex; i < lastIndex; i++) {
    if (i < list.size()) {
    resList.add(list.get(i));
    }
    }
    return resList;
    }

    private void updateRecyclerView(int fromIndex, int toIndex) {
    List<String> newDatas = getDatas(fromIndex, toIndex);
    if (newDatas.size() > 0) {
    adapter.updateList(newDatas, true);
    } else {
    adapter.updateList(null, false);
    }
    }

    @Override
    public void onRefresh() {
    refreshLayout.setRefreshing(true);
    adapter.resetDatas();
    updateRecyclerView(0, PAGE_COUNT);
    mHandler.postDelayed(new Runnable() {
    @Override
    public void run() {
    refreshLayout.setRefreshing(false);
    }
    }, 1000);
    }
    }

    package com.android.ryane.pulltoloaddata_recyclerview;

    import android.content.Context;
    import android.os.Handler;
    import android.os.Looper;
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;

    import java.util.ArrayList;
    import java.util.List;

    /**
    * Created by lijianchang@yy.com on 2017/4/12.
    */

    public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private List<String> datas;
    private Context context;
    private int normalType = 0;
    private int footType = 1;
    private boolean hasMore = true;
    private boolean fadeTips = false;
    private Handler mHandler = new Handler(Looper.getMainLooper());

    public MyAdapter(List<String> datas, Context context, boolean hasMore) {
    this.datas = datas;
    this.context = context;
    this.hasMore = hasMore;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    if (viewType == normalType) {
    return new NormalHolder(LayoutInflater.from(context).inflate(R.layout.item, null));
    } else {
    return new FootHolder(LayoutInflater.from(context).inflate(R.layout.footview, null));
    }
    }

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
    if (holder instanceof NormalHolder) {
    ((NormalHolder) holder).textView.setText(datas.get(position));
    } else {
    ((FootHolder) holder).tips.setVisibility(View.VISIBLE);
    if (hasMore == true) {
    fadeTips = false;
    if (datas.size() > 0) {
    ((FootHolder) holder).tips.setText("正在加载更多...");
    }
    } else {
    if (datas.size() > 0) {
    ((FootHolder) holder).tips.setText("没有更多数据了");
    mHandler.postDelayed(new Runnable() {
    @Override
    public void run() {
    ((FootHolder) holder).tips.setVisibility(View.GONE);
    fadeTips = true;
    hasMore = true;
    }
    }, 500);
    }
    }
    }
    }

    @Override
    public int getItemCount() {
    return datas.size() + 1;
    }

    public int getRealLastPosition() {
    return datas.size();
    }


    public void updateList(List<String> newDatas, boolean hasMore) {
    if (newDatas != null) {
    datas.addAll(newDatas);
    }
    this.hasMore = hasMore;
    notifyDataSetChanged();
    }

    class NormalHolder extends RecyclerView.ViewHolder {
    private TextView textView;

    public NormalHolder(View itemView) {
    super(itemView);
    textView = (TextView) itemView.findViewById(R.id.tv);
    }
    }

    class FootHolder extends RecyclerView.ViewHolder {
    private TextView tips;

    public FootHolder(View itemView) {
    super(itemView);
    tips = (TextView) itemView.findViewById(R.id.tips);
    }
    }

    public boolean isFadeTips() {
    return fadeTips;
    }

    public void resetDatas() {
    datas = new ArrayList<>();
    }

    @Override
    public int getItemViewType(int position) {
    if (position == getItemCount() - 1) {
    return footType;
    } else {
    return normalType;
    }
    }
    }

    尊重原著,原文地址:https://github.com/OnlyYouMyLove/PullToLoadData-RecyclerView

  • 相关阅读:
    python网络编程 — HTTP客户端
    实验吧Web-天网管理系统
    实验吧Web-FALSE
    实验吧Web-Forms
    离散数学-集合运算基本法则
    sublime text3编译运行C,Java程序的一些配置
    kali Rolling 安装QQ和虚拟机
    python并行任务之生产消费模式
    Linux磁盘管理
    python网络编程之网络主机信息
  • 原文地址:https://www.cnblogs.com/xiaoxiaing/p/7997563.html
Copyright © 2011-2022 走看看