1. 程式人生 > >使用SwipeRefreshLayout和RecyclerView實現仿“簡書”下拉重新整理和上拉載入

使用SwipeRefreshLayout和RecyclerView實現仿“簡書”下拉重新整理和上拉載入

package com.leohan.refresh;import android.os.Bundle;import android.os.Handler;import android.support.v4.widget.SwipeRefreshLayout;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.Toolbar;import android.util.Log;import android.view.View;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import butterknife.ButterKnife;import butterknife.InjectView;/** * @author Leo */public class MainActivity extends AppCompatActivity {    @InjectView(R.id.toolbar)    Toolbar toolbar;    @InjectView(R.id.recyclerView)    RecyclerView recyclerView;    @InjectView(R.id.SwipeRefreshLayout)    SwipeRefreshLayout swipeRefreshLayout;    boolean isLoading;    private List> data = new ArrayList<>();    private MyAdapter adapter = new MyAdapter(this, data);    private Handler handler = new Handler();    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_notice);        ButterKnife.inject(this);        initView();        initData();    }    public void initView() {        setSupportActionBar(toolbar);        toolbar.setTitle(R.string.notice);        toolbar.setNavigationOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                finish();            }        });        swipeRefreshLayout.setColorSchemeResources(R.color.blueStatus);        swipeRefreshLayout.post(new Runnable() {            @Override            public void run() {                swipeRefreshLayout.setRefreshing(true);            }        });        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {            @Override            public void onRefresh() {                handler.postDelayed(new Runnable() {                    @Override                    public void run() {                        data.clear();                        getData();                    }                }, 2000);            }        });        final LinearLayoutManager layoutManager = new LinearLayoutManager(this);        recyclerView.setLayoutManager(layoutManager);        recyclerView.setAdapter(adapter);        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {            @Override            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {                super.onScrollStateChanged(recyclerView, newState);                Log.d("test", "StateChanged = " + newState);            }            @Override            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {                super.onScrolled(recyclerView, dx, dy);                Log.d("test", "onScrolled");                int lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition();                if (lastVisibleItemPosition + 1 == adapter.getItemCount()) {                    Log.d("test", "loading executed");                    boolean isRefreshing = swipeRefreshLayout.isRefreshing();                    if (isRefreshing) {                        adapter.notifyItemRemoved(adapter.getItemCount());                        return;                    }                    if (!isLoading) {                        isLoading = true;                        handler.postDelayed(new Runnable() {                            @Override                            public void run() {                                getData();                                Log.d("test", "load more completed");                                isLoading = false;                            }                        }, 1000);                    }                }            }        });        //新增點選事件        adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {            @Override            public void onItemClick(View view, int position) {                Log.d("test", "item position = " + position);            }            @Override            public void onItemLongClick(View view, int position) {            }        });    }    public void initData() {        handler.postDelayed(new Runnable() {            @Override            public void run() {                getData();            }        }, 1500);    }    /**     * 獲取測試資料     */    private void getData() {        for (int i = 0; i < 6; i++) {            Map map = new HashMap<>();            data.add(map);        }        adapter.notifyDataSetChanged();        swipeRefreshLayout.setRefreshing(false);        adapter.notifyItemRemoved(adapter.getItemCount());    }}

相關推薦

使用SwipeRefreshLayoutRecyclerView實現仿重新整理載入

package com.leohan.refresh;import android.os.Bundle;import android.os.Handler;import android.support.v4.widget.SwipeRefreshLayout;import android.support.v7

詳解自主實現RecyclerView重新整理載入、Header、Footer以及swiperefreshlayout的部分講解

  年前年後的那段時間比較忙,忙的來忘了寫部落格。最近空閒了,有時間了,來看部落格發現有兩個來月沒有發文章了,對自己的沒有堅持先來幾個,部落格還是要寫的,以後會持續更新。   廢話少說,網上關於列表控

詳解RecyclerView+BGARefreshLayout實現自定義重新整理載入側滑刪除效果

前言 還有2個月就過年了,對於我們這樣在外漂泊的異鄉人來說,一家人團聚在一起,吃一頓團圓飯,那是再幸福不過的事了。我們之所以遠離家鄉來到異鄉就像異鄉人這首歌寫的一樣,只為一扇窗! 正文 上篇文章給大家講解了一下關於RecyclerView的使用,今天給

用popupwindowselector實現仿qq的選單

概要 做了幾天紙模,所以沒來得及更新部落格~生活才是主流嘛,嘿嘿,小展示一下我的成果 哈哈~言歸正傳,這次我們來看一下如何實現qq裡面的下拉列表(我們的比他漂亮哦~) 效果展示 我們要實現的 我們的效果 知識點 1.什麼是popupwindow? 答

Recyclerview實現列表分組、重新整理以及載入--原始碼

這裡放上之前整理的一篇文章的完整原始碼,因為是從專案中抽取出來的,也沒有單獨再寫一個demo,希望需要的小夥伴能結合之前寫的一篇文章,理解實現原理,而不要簡單的想要直接copy拿來用,這裡是博文地址: import android.content.Con

Recyclerview實現列表分組、重新整理以及載入更多

為什麼要使用Recyclerview替代ListView等傳統元件 目前的專案中已經逐步拋棄了ListView、GridView以及各種自定義的瀑布流效果的第三方庫了,統一用強大的替代者Recyclerview來實現。一個Recyclerview就解決了上面三

RecyclerView重新整理載入及新增頭佈局、腳佈局實現

image.png 前言 隨著RecyclerView的越來越流行,我看著專案裡ListView、GridView陷入沉思,是時候開始改變了!(認真臉)我決定將專案中的這些控制元件都改用RecyclerView。然而,像下拉重新整理等功能是必不可少的,雖然有很多現成的可以

[log] vue使用Mint元件實現重新整理載入

https://mint-ui.github.io/docs/#/zh-cn2/loadmore 使用的vue <mt-loadmore :top-method="loadTop" :bottom

TwinklingRefreshLayout 簡單實現實現重新整理載入

支援下拉重新整理和上拉載入的RefreshLayout,自帶越界回彈效果,支援RecyclerView,AbsListView,ScrollView,WebView 本文以ListView為例,實現上拉重新整理和下拉載入,其他的就不在舉例,原理是一樣的。 先看一下效果(效

better-scroll實現重新整理載入更多(巨簡單...)

1、廢話少說,先看看移動端的列表頁面 (1)正常瀏覽 (2)下拉重新整理中 (3)下拉重新整理結束 (4) 上拉載入 (5)上拉 載入中 3、網上也有一些基本使用教程,這裡就不一一累贅,下

實現重新整理載入可自定義各種動畫

一、使用說明 1、UltimateRefreshView 支援ListView,GridView,ScrollView,WebVIew,RecyclerView(只支援LinearLayoutManager). 2、佈局使用: 1 2 3 4 5 6 7 8 9 1

重新整理載入更多的SwipeRefreshLayout(可自定義動畫)

為啥重複搞,搞得還沒人家好,因為除了需求,還有理解。我是這麼認為的。 因為懶所以寫出來留作自用,以後就是修修改改了。 打造自己的“下拉重新整理,上拉載入更多,自定義動畫及佈局”控制元件 (拷貝SwipeRefreshLayout原始碼進行修改) 不鬥圖的碼農你見過

SwipeRefreshLayout重新整理載入更多,分頁載入

SwipeRefreshLayout官方提供的下拉重新整理功能實現: xml程式碼: <android.support.v4.widget.SwipeRefreshLayout android:layout_width="match_paren

關於重新整理載入的問題--RecyclerView-- SwipeToLoadLayout

RecyclerView-- SwipeToLoadLayout關於頁面資料載入的問題:下拉重新整理,本次只介紹關於RecycleView的一個重新整理框架SwipeToLoadLayout(一)首先介紹下RecyclerView,RecyclerView相比ListView

SwipeToLoadLayout實現Android重新整理載入

最近一段時間需要對手上的專案進行重構,一方面等甲方對業務流程的需求,另一方面由於新配了電腦可以流暢的執行Android Studio了正好也閒著沒事就打算把UI重新搞一搞順便降低各個模組的耦合度,在實現列表的地方噁心到我了。 因為之前一直用的的PullToRefresh在列

SwipeRefreshLayout 重新整理載入的使用

一、SwipeRefreshLayout簡單介紹 1、SwipeRefreshLayout是Google推出的重新整理控制元件。 2、可以設定下拉重新整理的高度,達到一定高度時才會重新整理 3、使用該控制元件實現重新整理時,需要在這個佈局裡包裹可以滑動的子

VUE2 配合mint-ui實現 自定義 loadmore(重新整理更多)

<template> <div class="page-loadmore"> <h1 class="page-title">Pull up</h1> <p class="page-loadmore-de

Android仿QQ重新整理回彈

附上原始碼地址…… http://download.csdn.net/detail/qq_36255612/9717199 首先自定義一個Scrollview, 重寫computeScroll、on

Android 基於 MVP 框架的重新整理載入頁面,ViewPresenter層基類封裝

前言 Android 專案開發中經常遇到列表式頁面,並且需要實現下拉重新整理,上拉到底後加載下一頁的功能,這裡結合我們專案正在使用的 MVP 框架,介紹一種基類封裝方案,實現 View、Adapter、資料處理Presenter層的基類封裝,後續繼承這幾個類,

重新整理載入更多控制元件實現原理及解析(一)

以前那個賬號,以後可能不用了,把文章搬過來!!! 效果預覽 接受hi大頭鬼hi的建議,來一個動態圖,方便大家知道這是個什麼東西。 動機 原理     無論是下拉重新整理還是上拉載入更多,原理都是在內容View(ListView、Re