1. 程式人生 > >解決AppBarLayout 與SwipeRefreshLayout RecyclerView 上拉載入更多導致的延遲

解決AppBarLayout 與SwipeRefreshLayout RecyclerView 上拉載入更多導致的延遲

import android.content.Context;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CoordinatorLayout;
import android.support.v4.view.ViewCompat;
import android.util.AttributeSet;
import android.view.View;

/**
 * Created by admin on 2018/8/7.
 */

public class FixAppBarLayoutBehavior extends AppBarLayout.Behavior {

    public FixAppBarLayoutBehavior() {
        super();
    }

    public FixAppBarLayoutBehavior(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void onNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type) {
        super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, type);
        stopNestedScrollIfNeeded(dyUnconsumed, child, target, type);
    }

    @Override
    public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed, int type) {
        super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type);
        stopNestedScrollIfNeeded(dy, child, target, type);
    }

    private void stopNestedScrollIfNeeded(int dy, AppBarLayout child, View target, int type) {
        if (type == ViewCompat.TYPE_NON_TOUCH) {
            final int currOffset = getTopAndBottomOffset();
            if ((dy < 0 && currOffset == 0) || (dy > 0 && currOffset == -child.getTotalScrollRange())) {
                ViewCompat.stopNestedScroll(target, ViewCompat.TYPE_NON_TOUCH);
            }
        }
    }

}

在appbarlayout中 新增

<android.support.design.widget.AppBarLayout
    android:id="@+id/app_bar_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/white"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:elevation="0dp"
    app:layout_behavior="包名.FixAppBarLayoutBehavior">

將這個behabvior 新增 即可

相關推薦

解決AppBarLayout SwipeRefreshLayout RecyclerView 載入導致延遲

import android.content.Context; import android.support.design.widget.AppBarLayout; import android.support.design.widget.CoordinatorLayout;

讓Android Support V4中的SwipeRefreshLayout支援載入

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

自定義SwipeRefreshLayout實現載入並自帶系統的下重新整理

/** * Created by lzy on 2017/6/6 0006. */ public class MySwipeRefreshLayout extends SwipeRefreshLayout{ private final TextView mFoo

繼承SwipeRefreshLayout實現載入功能

Android 的SwipeRefreshLayout是一個比較好的下拉重新整理控制元件,現在已經有越來越多的企業開始使用這個控制元件了。但是遺憾的是這個控制元件並沒有上拉載入更多的功能,所以自己抽空,根據網上已有的例子,自己寫了一個。 首先必須要做的是建立一個類繼承SwipeRefresh

RecyclerView載入重新整理優雅姿勢

BaseRecyclerViewAdapterHelper+EasyRefreshLayout優雅實現recyclerView上拉載入更多下拉重新整理直接上程式碼:佈局:<com.ajguan.l

RecyclerView 載入及滾動到底部的判斷()

關於下拉重新整理上拉載入更多,網上有很多例子;下拉重新整理比較簡單直接使用系統提供 SwipeRefreshLayout 即可,比較麻煩的是上拉載入更多,實現上拉的方法多種多樣,這裡對各個方法總結一下。 需求分析 RecyclerView 滾動到底部後,

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

效果圖: 檔案目錄 佈局檔案 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/

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

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

Android滑動衝突解決方式(下重新整理載入,適配RecyclerView/ListView/ScrollView)

@Override public boolean judgeIntercept(float curInterceptY, float lastInterceptY, boolean isHeaderShow, boolean isFooterShow, boolean allowLoadM

RecyclerView詳解(基本使用+解決複用+新增HEAD和FOOT+載入+下重新整理)以及ExpandableListView的簡單使用

一、RecyclerView的簡單使用先看效果圖程式碼實現1.引入recyclerview包implementation 'com.android.support:design:27.1.0' 2.佈局中新增RecyclerView<?xml version="1.0"

CoordinatorLayout AppBarLayout 結合下重新整理 載入 的滑動衝突解決

如果appBarLayout中有摺疊控制元件 CollapsingToolbarLayout 或者其他一些控制元件 在滾動的時候進行判斷和重新整理事件處理 在這裡:重新整理框架:為 SwipyRefreshLayout 第一步:設定appBarLayout的監聽: if

裝飾模式應用 為RecyclerView.Adapter新增載入

這個包裝類主要有兩個關鍵點: 第一個是列表尾部新增一個條目,用於顯示各種載入的狀態,就是添加了一個特殊型別的holder。 第二個是監控列表滾動,滾動到我們新增的那個holder的時候,觸發我們需要的操作,比如修改holder裡的狀態文字等。 注意問題: 以前做過兩一個實

最全的使用RecyclerView實現下重新整理和載入

前言:            縱觀多數App,下拉重新整理和上拉載入更多是很常見的功能,但是谷歌官方只有一個SwipeRefreshLayout用來下拉重新整理,上拉載入更多還要自己做。      本篇文章基於RecyclerView簡單封裝了這兩個操作,下拉重

重新整理,載入SwipeRefreshLayout(可自定義動畫)

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

RecyclerView三種顯示方式的下重新整理和載入

但是之前寫的那個有一點點的小問題,如果上拉重新整理,重新整理小圖示還沒有移動到重新整理位置,重新整理資料就已經獲取到,並且呼叫了setRefreshing(false),在setRefreshing(false)中會去呼叫translationTo(int from,i

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

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

RecyclerView展示固定資料、載入、下重新整理、點選事件、長按點選事件、刪除條目、重新整理條目、新增條目、條目載入

1、依賴:    implementation 'com.android.support:recyclerview-v7:27.0.2' 2、activity_main、 <?xml version="1.0" encoding="utf-8"?> <Li

手把手教你實現RecyclerView的下重新整理和載入

個人原創,轉載請註明出處http://blog.csdn.net/u012402124/article/details/78210639 2018年10月25日更新 讓大家花費時間看文章卻沒有解決需求,隨著bug的增多內心的愧疚感逐漸增強,但幾個月前的程式

Android使用RecyclerView實現載入,下重新整理,分組顯示

專案地址:點選開啟連結(https://github.com/MrGaoGang/luckly_recyclerview) 使用RecyclerView封裝headerview,footerView,並實現上拉載入更多,下拉重新整理,分組功能(新增上拉載入和下拉

3秒鐘不懂你砍我:RecyclerView重新整理和載入(開源中國List業務流程全解析)

這裡以開源中國開源資訊頁面為例子。 這個頁面資料的url:http://www.oschina.net/action/apiv2/news?pageToken= 是這樣的 json資料的結構: NewsBean返回成功與否的code和msg。 ResultBean返回的