Giter Club home page Giter Club logo

xrefreshview's Introduction

XRefreshView

Usage


Gradle

dependencies {
   compile 'com.huxq17.xrefreshview:xrefreshview:3.6.9'
   //依赖下面的库
   implementation 'androidx.recyclerview:recyclerview:1.1.0'
}

最新的使用说明请移步我的博客

效果图

松开加载更多的Recyclerview 带Banner的Recyclerview LinearLayout样式的Recyclerview
GridLayout样式的Recyclerview Staggered样式的Recyclerview
GridView 自定义View 笑脸刷新
自定义刷新 仿京东刷新 自定义刷新

还有listview,scrollview,webview等其他的view就不一一截图了。建议把此项目下载下来,然后跑到手机上看效果,例子都在app module里。

更新日志:

2020-6-13:
1.更新android平台到androidx


2017-5-4:
1.解决已无更多数据显示不出来的问题,fix issue[#78](https://github.com/huxq17/XRefreshView/issues/78)
2.升级到3.6.9版本

2017-5-3:
1.解决xrefreshview不满屏的时候footerview正常状态下出现在屏幕上的问题,fix issue[#75](https://github.com/huxq17/XRefreshView/issues/75)
2.升级到3.6.8版本

2017-4-25:
1.通过使用XWebView,解决在三星c5、小米5等机型在webview上加XRefreshView,会出现加载更多没有效果的现象,详见issue[#72](https://github.com/huxq17/XRefreshView/issues/72)
2.升级到3.6.7版本

2017-4-14:
1.解决Recyclerview频繁上拉加载时会出现footerview位置异常的问题
2.给setSilenceLoadMore方法添加boolean参数,可以启用和禁用静默加载模式  
3.升级到3.6.6版本

2017-3-28:
1.不再强制Recyclerview使用BaseRecyclerAdapter,当不使用BaseRecyclerAdapter时,RecyclerView会被当成普通view
上拉加载等操作和普通view相同,空布局等功能的使用方式也和普通view相同
2.解决ListView的子项目不足一屏时,上拉时再下拉会出现布局突然缩回的问题
3.升级到3.6.5版本

2017-3-27:
1.解决事先setPullRefreshEnable(false),再setPullRefreshEnable(true)和startRefresh()时,headerview无法显示的问题
2.升级到3.6.3版本

2017-2-17:
1.添加下拉刷新时的回调onRefresh(boolean isPullDown),其中isPullDown用来判断此次下拉刷新是不是由下拉手势触发的,true则代表是,
反之则是自动刷新或者是调用XRefreshView#startRefresh()}触发的刷新
2.升级到3.6.2版本

2017-2-16:
1.解决issue[#58](https://github.com/huxq17/XRefreshView/issues/58)

2017-1-13:
1.解决Recyclerview使用StaggeredGridLayoutManager时,添加的headerview不能使用全部宽度的问题(headview layout won't use all span area)

2017-1-6:
1.解决issue[#49](https://github.com/huxq17/XRefreshView/issues/49)

2017-1-4:
1.解决AbsListview数据不满一屏的时候,会重复加载更多的问题

2016-12-15:
1.优化非RecyclerView上拉加载回弹的效果,同时支持AbsListView(ListView、GridView)加载更多数据完成之后露出新加载的数据

2016-9-28:
1.添加xscrollview的滑动监听

2016-9-6:
1.解决issue[#36](https://github.com/huxq17/XRefreshView/issues/36)

2016-8-19:
1.添加没有数据时显示空布局的支持
2.解决6.0以下的手机,在调用startRefresh()方法后,刷新时headerview有时会不显示的问题
3.其他一些优化

2016-8-8:
1.添加下拉刷新,数据接收失败的ui处理
2.解决下拉刷新,在刷新状态下把headerview完全隐藏掉,在刷新结束以后下拉和上拉都不可用的问题

关于我

   ps:有问题联系我的话请不要问我在不在,直接说问题,谢谢。

License

Copyright (C) 2015 huxq17

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

xrefreshview's People

Contributors

fanyafeng avatar huxq17 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xrefreshview's Issues

加载更多问题

重写了加载更多布局,发现里面的回调事件并没有执行,只执行了onStateRefreshing和onStateFinish方法,我使用的是webview

如何与coordinatorlayout混搭使用

上滑的时候希望把AppBarlayout里面的toolbar给隐藏掉,然后下滑的时候又显示出来,在包含在coordinatorlayout里面之后出现了冲突,有什么办法可以解决掉这个冲突么。
比如




<XRefreshView>
   <RecyclerView>
   </RecycerView>
<XRefrsehView>

无用的log

输出了太多无用的log,请问有没有开关

onLoadMore 多次加载

在向上快速滑动时, 有时会加载两次这个函数,导致界面出现弹跳效果。 版本 3.5.6

设置setCustomLoadMoreView不显示

您好,请问个问题,我在使用XRefreshView上拉加载更多中,设置了默认的上拉加载的View,但显示不出来,请指点下,以下是我的代码:
private void bindRecycleView() {
this.loadData();
this.xRefreshView.setPullLoadEnable(true);
CustomGifHeader header = new CustomGifHeader(this.getActivity());
this.xRefreshView.setCustomHeaderView(header);
this.xRefreshView.setPinnedTime(1000);
this.xRefreshView.setMoveForHorizontal(true);
//this.xRefreshView.setAutoLoadMore(true);
this.adapter = new RecyclerAdapter(this.getActivity(), this.listData, R.layout.item_bidding_record) {
@OverRide
public void convert(RecyclerViewHolder helper, String item, int position) {
RelativeLayout rl_bottom_underway = helper.getView(R.id.rl_bottom_underway);
RelativeLayout rl_bottom_announced = helper.getView(R.id.rl_bottom_announced);
rl_bottom_underway.setVisibility(View.GONE);
rl_bottom_announced.setVisibility(View.GONE);
int number = CommonHelper.getRandomNumber(0, 100) % 2;
if (number == 0) {
rl_bottom_underway.setVisibility(View.VISIBLE);
} else {
rl_bottom_announced.setVisibility(View.VISIBLE);
String winner = MessageFormat.format("获得者:<font color="#0171bb">{0}", "今天要中");
helper.setText(R.id.tv_winner, Html.fromHtml(winner));
String frequency = MessageFormat.format("<font color="#f95667">{0}人次", "8");
helper.setText(R.id.tv_frequency, Html.fromHtml(frequency));
}
}
};
this.rv_bidding.setHasFixedSize(true);
this.rv_bidding.setLayoutManager(new LinearLayoutManager(getActivity()));
this.rv_bidding.setAdapter(this.adapter);
this.adapter.setCustomLoadMoreView(new XRefreshViewFooter(this.getContext()));
}

刷新recyclerview列表数据由不满屏到满屏出现crash

如题,crash信息为:
java.lang.IllegalArgumentException: Scrapped or attached views may not be recycled. isScrap:false isAttached:true at android.support.v7.widget.RecyclerView$Recycler.recycleViewHolderInternal(RecyclerView.java:5177) at android.support.v7.widget.RecyclerView$Recycler.quickRecycleScrapView(RecyclerView.java:5248) at android.support.v7.widget.RecyclerView$LayoutManager.removeAndRecycleScrapInt(RecyclerView.java:7678) at android.support.v7.widget.RecyclerView.dispatchLayoutStep3(RecyclerView.java:3333) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3080) at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3518) at android.view.View.layout(View.java:16630) at android.view.ViewGroup.layout(ViewGroup.java:5437) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586) at android.widget.LinearLayout.onLayout(LinearLayout.java:1495) at com.grape.wine.view.xrefreshview.XRefreshView.onLayout(XRefreshView.java:268)

上拉加载更多setCustomLoadMoreView的问题

viewpager嵌套fragment的情况,只有第一个fragment和最后一个fragment中可以正常使用加载更多功能,其他fragment会显示加载完成,并且需要上拉2个才能正常加载

初始化设置参数问题

private Runnable mLoadingRunnable = new Runnable() {

    @Override
    public void run() {
        initVariables();
        initView();
        initDataAndLoadData();

    }
};


@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

 //省略设置布局


    getWindow().getDecorView().post(() -> mHandler.post(mLoadingRunnable));


}

在initView()里才设置XRefreshView相关的设置。是无效的。

昨天遇到了个问题 Called attach on child which is not detached:ViewHolder

我一开始就调xrefreshView.setLoadComplete(false);就出现Called attach on child which is not detached:ViewHolder这个问题。

在找不出问题的情况下,及时联系了作者。跟他反馈了这个问题。他帮我一条条分析。最后。作者连夜帮我解决了。所以更新3.0.1 上 是 好 了。

上拉加载更多的问题

ViewPager下,在XScrollView中,如果设置setAutoLoadMore(false),在内容在竖直方向上并未撑满一个窗口时,将无法上拉加载,而设置setAutoLoadMore(true),在内容未撑满一个窗口或恰好位于内容的底部时左右切换视图也会触发加载更多。
把XRefreshContentView.java中的canChildPullUp方法中的scrollView.getScrollY() != childView.getHeight() - scrollView.getHeight();改成<似乎能解决这个问题

绝对的好作者

我是忠实的粉丝。使用这个项目已经快一年了。有什么问题,有什么需求。都是直接找作者。他都是第一时间非常热心的帮忙解决。

RecyclerView不满屏的情况下,不显示“点击加载更多“,满屏之后上拉自动加载更多的解决办法

第一步,加一个自定义CustomerFooter.java
package com.andview.example.activity;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.andview.refreshview.XRefreshView.XRefreshViewListener;
import com.andview.refreshview.callback.IFooterCallBack;
import com.andview.refreshview.utils.Utils;

public class CustomerFooter extends LinearLayout implements IFooterCallBack {
private Context mContext;

private View mContentView;
private View mProgressBar;
private TextView mHintView;
private TextView mClickView;
private boolean showing = false;

public CustomerFooter(Context context) {
    super(context);
    initView(context);
}

public CustomerFooter(Context context, AttributeSet attrs) {
    super(context, attrs);
    initView(context);
}
private RecyclerView recyclerView;

public void setRecyclerView(RecyclerView recyclerView) {
    this.recyclerView = recyclerView;
}

@Override
public void callWhenNotAutoLoadMore(final XRefreshViewListener listener) {
    //当数据不满一屏时不显示点击加载更多
    if(recyclerView!=null){
        show(Utils.isRecyclerViewFullscreen(recyclerView));
    }

// setVisibility(Utils.isRecyclerViewFullscreen(recyclerView)?VISIBLE:GONE);
mClickView.setText(com.andview.refreshview.R.string.xrefreshview_footer_hint_click);
mClickView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            if (listener != null) {
                listener.onLoadMore(false);
                onStateRefreshing();
            }
        }
    });
}

@Override
public void onStateReady() {
    mHintView.setVisibility(View.GONE);
    mProgressBar.setVisibility(View.GONE);
    mClickView.setVisibility(View.VISIBLE);
    show(true);
}

@Override
public void onStateRefreshing() {
    mHintView.setVisibility(View.GONE);
    mProgressBar.setVisibility(View.VISIBLE);
    mClickView.setVisibility(View.GONE);
    show(true);
}

@Override
public void onStateFinish(boolean hideFooter) {
    if (hideFooter) {
        mHintView.setText(com.andview.refreshview.R.string.xrefreshview_footer_hint_normal);
    } else {
        //处理数据加载失败时ui显示的逻辑,也可以不处理,看自己的需求
        mHintView.setText(com.andview.refreshview.R.string.xrefreshview_footer_hint_fail);
    }
    mHintView.setVisibility(View.VISIBLE);
    mProgressBar.setVisibility(View.GONE);
    mClickView.setVisibility(View.GONE);
}

@Override
public void onStateComplete() {
    mHintView.setText(com.andview.refreshview.R.string.xrefreshview_footer_hint_complete);
    mHintView.setVisibility(View.VISIBLE);
    mProgressBar.setVisibility(View.GONE);
    show(true);
}

@Override
public void show(boolean show) {
    showing = show;
    LayoutParams lp = (LayoutParams) mContentView
            .getLayoutParams();
    lp.height = show ? LayoutParams.WRAP_CONTENT : 0;
    mContentView.setLayoutParams(lp);
}

@Override
public boolean isShowing() {
    return showing;
}

private void initView(Context context) {
    mContext = context;
    ViewGroup moreView = (ViewGroup) LayoutInflater.from(mContext).inflate(com.andview.refreshview.R.layout.xrefreshview_footer, this);
    moreView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

    mContentView = moreView.findViewById(com.andview.refreshview.R.id.xrefreshview_footer_content);
    mProgressBar = moreView
            .findViewById(com.andview.refreshview.R.id.xrefreshview_footer_progressbar);
    mHintView = (TextView) moreView
            .findViewById(com.andview.refreshview.R.id.xrefreshview_footer_hint_textview);
    mClickView = (TextView) moreView
            .findViewById(com.andview.refreshview.R.id.xrefreshview_footer_click_textview);
}

@Override
public int getFooterHeight() {
    return getMeasuredHeight();
}

}

第二步:在自己的activity中这样调用上面的自定义Footer
CustomerFooter customerFooter = new CustomerFooter(this);
customerFooter.setRecyclerView(recyclerView);

    adapter.setCustomLoadMoreView(customerFooter);

最后:这个是在作者的帮助下解决的,非常感谢作者的热心帮助。

'boolean com.andview.refreshview.XRefreshView.hasLoadCompleted()' on a null object reference

else if (null == mContainer) {
if (!mIsLoadingMore && isOnRecyclerViewBottom()) {
refreshAdapter(adapter, layoutManager);
if (!mContainer.hasLoadCompleted()) {
if (mState != XRefreshViewState.STATE_READY) {
mFooterCallBack.onStateReady();
setState(XRefreshViewState.STATE_READY);
}
} else {
loadCompleted();
}
} else {
setState(XRefreshViewState.STATE_NORMAL);
}
}

按照你的Master中的demo去写. 发现项目能加载成功,但是上拉到底部的时候是直接报错.

null == mContainer为空的时候再去调用方法 if (!mContainer.hasLoadCompleted()) { }肯定是会报错的

求解.

无法设置上拉加载更多

在ViewPager中的一个Fragment中,已使用XRefreshView嵌套一个RecyclerView
该RecyclerView能正常下拉刷新,但无法上拉加载更多
已设置 refreshView.setPullLoadEnable(true);

最后,为什么不做一个简单的demo呢 。

只要下拉刷新,不要上拉加载.

只要下拉刷新,不要上拉加载.

我设置了取消上拉刷新,只要下拉刷新,但是进入界面的时候还是可以上拉刷新.

public void setRefreshData(boolean pullLoadMore, boolean autoRefresh) {
refreshView.setPullLoadEnable(pullLoadMore);
refreshView.setAutoLoadMore(false);
refreshView.setAutoRefresh(autoRefresh);
refreshView.setXRefreshViewListener(new XRefreshView.SimpleXRefreshListener() {
@OverRide
public void onRefresh() {
refreshData();
}

        @Override
        public void onLoadMore(boolean isSlience) {
            loadMoreData();
        }

    });
}

调用setRefreshData(false, true); 调用该方法还是会出现上拉加载更多的界面. 求解决方案

设置自带的footer之后还是不显示

rvProductRefresh.setCustomFooterView(new XRefreshViewFooter(getActivity()));

设置了这个,但是拉到底还是无法显示footer。另外,弱弱的说一下,能不能提供一个logEnable的函数来关闭log打印?刷屏刷的都看不清东西了……跳到代码看了一下你用的LogUtils这个类都没提供关闭的log的函数……只能改allowD这几个静态值

listview的问题

下载了你的demo,在listviewactivity试了一下 发现如果把上拉下拉都设置为true 那么上拉第二次以后下拉就无法使用了,上拉的loading也一直在转。请问这个要怎么弄呢
// 设置是否可以下拉刷新
refreshView.setPullRefreshEnable(true);
// 设置是否可以上拉加载
refreshView.setPullLoadEnable(true);

关于事件分发的问题

目前的情况是, 我想在某些场合,例如,我的一个ListView中的一个item的滑动事件发生的时候,不触发xrefreshview的下拉事件,请问有类似的解决方案吗?谢谢

需求

上拉加载更多。1,不满一屏,无需加载更多。2.上拉加载更多时,如果加载失败,footerview 不消失,提示方案“加载失败,请点击重新”。3,如果数据满一屏,数据已经加载全部。footerview不消失,方案“已经加载完全部”,每次滑到底部都有这个"已经加载完全部"的footerview。

关于baserecyclerviewadapter

@OverRide
public final int getItemViewType(int position) {
if (isHeader(position)) {
return VIEW_TYPES.HEADER;
} else if (isFooter(position)) {
return VIEW_TYPES.FOOTER;
} else {
position = getStart() > 0 ? position - 1 : position;
return getAdapterItemViewType(position);
}
}
这定义为final我感觉有点不合理,如果我需要根据这个去判断我自定义的header而base中用的是final定义的

关于上拉加载状态

我看了一下代码,现在如果这是上拉自动加载的话,框架是不会判断是否footer全部显示才加载,只要拉到底部就加载,ui的话progressbar只要显示就是转动的,貌似没有一个prepare状态,简单来说就是和下拉刷新一样,拉到footer全部显示再进行动画显示,isShowing()判断的话只要是显示一点就为true,我理解的对么?

请教一个关于上拉加载的问题

使用listview时,上拉加载后,显示加载状态,加载好数据后,加载状态消失,最后一行item会回弹到底部,是否可设置让新数据出现在加载状态那行,最后的item不回弹到底部,类似图片动画的效果

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.