Giter Club home page Giter Club logo

bgarefreshlayout-android's Introduction

🏃BGARefreshLayout-Android🏃

Android Arsenal License Download

开发者使用 BGARefreshLayout-Android 可以对各种控件实现多种下拉刷新效果、上拉加载更多以及配置自定义头部广告位

测试 BGARefreshLayout 与 Activity、Fragment、ViewPager 的各种嵌套的 Demo

常见问题-加载更多视图无法显示

1.BGARefreshLayout 的直接子控件的高度请使用 android:layout_height="0dp" 和 android:layout_weight="1"

<cn.bingoogolapple.refreshlayout.BGARefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rl_modulename_refresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- BGARefreshLayout 的直接子控件 -->
    <AnyView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
</cn.bingoogolapple.refreshlayout.BGARefreshLayout>

2.如果是在 Fragment 中使用 BGARefreshLayout

请在 onCreateView 方法中初始化 BGARefreshLayout,不要在 onActivityCreated 方法中初始化

目前已经实现了四种下拉刷新效果:

  • 新浪微博下拉刷新风格(可设置各种状态是的文本,可设置整个刷新头部的背景)
  • 慕课网下拉刷新风格(可设置其中的 logo 和颜色成自己公司的风格,可设置整个刷新头部的背景)
  • 美团下拉刷新风格(可设置其中的图片和动画成自己公司的风格,可设置整个刷新头部的背景)
  • 类似 qq 好友列表黏性下拉刷新风格(三阶贝塞尔曲线没怎么调好,刚开始下拉时效果不太好,可设置整个刷新头部的背景)

一种上拉加载更多效果

  • 新浪微博上拉加载更多(可设置背景、状态文本)

开发者也可以继承 BGARefreshViewHolder 这个抽象类,实现相应地抽象方法做出格式各样的下拉刷新效果【例如实现 handleScale(float scale, int moveYDistance) 方法,根据 scale 实现各种下拉刷新动画】和上拉加载更多特效,可参考 BGAMoocStyleRefreshViewHolder、BGANormalRefreshViewHolder、BGAStickinessRefreshViewHolder、BGAMeiTuanRefreshViewHolder 的实现方式。

目前存在的问题

  • 当配置自定义头部广告位可滚动时,内容区域和广告位还不能平滑过度。
  • 当 BGAStickyNavLayout 中嵌套 RecyclerView 或 AbsListView,并且第一页的最后一个 item 刚好在最底部时,加载更多视图会悬浮在最后一个 item 上面
  • 正在刷新或加载更多时,用户上下滑动不会让下拉刷新视图和加载更多视图跟着滑动

效果图

bga_refreshlayout1 bga_refreshlayout2 bga_refreshlayout3 bga_refreshlayout4 bga_refreshlayout5 bga_refreshlayout6

基本使用

1.添加 Gradle 依赖

  • maven { url 'https://jitpack.io' } 添加到 root build.gradle 的 repositories 中
  • 在 app build.gradle 中添加如下依赖,末尾的「latestVersion」指的是徽章 里的版本名称,请自行替换
dependencies {
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'com.github.bingoogolapple:BGARefreshLayout-Android:latestVersion'
}

2.在布局文件中添加 BGARefreshLayout

注意:内容控件的高度请使用 android:layout_height="0dp" 和 android:layout_weight="1"

<cn.bingoogolapple.refreshlayout.BGARefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rl_modulename_refresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- 内容控件 -->
    <AnyView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
</cn.bingoogolapple.refreshlayout.BGARefreshLayout>

3.在 Activity 或者 Fragment 中配置 BGARefreshLayout

// 让 activity 或者 fragment 实现 BGARefreshLayoutDelegate 接口
public class ModuleNameActivity extends AppCompatActivity implements BGARefreshLayout.BGARefreshLayoutDelegate {
    private BGARefreshLayout mRefreshLayout;

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

        initRefreshLayout();
    }

    private void initRefreshLayout(BGARefreshLayout refreshLayout) {
        mRefreshLayout = (BGARefreshLayout) findViewById(R.id.rl_modulename_refresh);
        // 为BGARefreshLayout 设置代理
        mRefreshLayout.setDelegate(this);
        // 设置下拉刷新和上拉加载更多的风格     参数1:应用程序上下文,参数2:是否具有上拉加载更多功能
        BGARefreshViewHolder refreshViewHolder = new XXXImplRefreshViewHolder(this, true))
        // 设置下拉刷新和上拉加载更多的风格
        mRefreshLayout.setRefreshViewHolder(refreshViewHolder);


        // 为了增加下拉刷新头部和加载更多的通用性,提供了以下可选配置选项  -------------START
        // 设置正在加载更多时不显示加载更多控件
        // mRefreshLayout.setIsShowLoadingMoreView(false);
        // 设置正在加载更多时的文本
        refreshViewHolder.setLoadingMoreText(loadingMoreText);
        // 设置整个加载更多控件的背景颜色资源 id
        refreshViewHolder.setLoadMoreBackgroundColorRes(loadMoreBackgroundColorRes);
        // 设置整个加载更多控件的背景 drawable 资源 id
        refreshViewHolder.setLoadMoreBackgroundDrawableRes(loadMoreBackgroundDrawableRes);
        // 设置下拉刷新控件的背景颜色资源 id
        refreshViewHolder.setRefreshViewBackgroundColorRes(refreshViewBackgroundColorRes);
        // 设置下拉刷新控件的背景 drawable 资源 id
        refreshViewHolder.setRefreshViewBackgroundDrawableRes(refreshViewBackgroundDrawableRes);
        // 设置自定义头部视图(也可以不用设置)     参数1:自定义头部视图(例如广告位), 参数2:上拉加载更多是否可用
        mRefreshLayout.setCustomHeaderView(mBanner, false);
        // 可选配置  -------------END
    }

    @Override
    public void onBGARefreshLayoutBeginRefreshing(BGARefreshLayout refreshLayout) {
        // 在这里加载最新数据

        if (mIsNetworkEnabled) {
            // 如果网络可用,则加载网络数据
            new AsyncTask<Void, Void, Void>() {

                @Override
                protected Void doInBackground(Void... params) {
                    try {
                        Thread.sleep(MainActivity.LOADING_DURATION);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    return null;
                }

                @Override
                protected void onPostExecute(Void aVoid) {
                    // 加载完毕后在 UI 线程结束下拉刷新
                    mRefreshLayout.endRefreshing();
                    mDatas.addAll(0, DataEngine.loadNewData());
                    mAdapter.setDatas(mDatas);
                }
            }.execute();
        } else {
            // 网络不可用,结束下拉刷新
            Toast.makeText(this, "网络不可用", Toast.LENGTH_SHORT).show();
            mRefreshLayout.endRefreshing();
        }
    }

    @Override
    public boolean onBGARefreshLayoutBeginLoadingMore(BGARefreshLayout refreshLayout) {
        // 在这里加载更多数据,或者更具产品需求实现上拉刷新也可以

        if (mIsNetworkEnabled) {
            // 如果网络可用,则异步加载网络数据,并返回 true,显示正在加载更多
            new AsyncTask<Void, Void, Void>() {

                @Override
                protected Void doInBackground(Void... params) {
                    try {
                        Thread.sleep(MainActivity.LOADING_DURATION);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    return null;
                }

                @Override
                protected void onPostExecute(Void aVoid) {
                    // 加载完毕后在 UI 线程结束加载更多
                    mRefreshLayout.endLoadingMore();
                    mAdapter.addDatas(DataEngine.loadMoreData());
                }
            }.execute();

            return true;
        } else {
            // 网络不可用,返回 false,不显示正在加载更多
            Toast.makeText(this, "网络不可用", Toast.LENGTH_SHORT).show();
            return false;
        }
    }

    // 通过代码方式控制进入正在刷新状态。应用场景:某些应用在 activity 的 onStart 方法中调用,自动进入正在刷新状态获取最新数据
    public void beginRefreshing() {
        mRefreshLayout.beginRefreshing();
    }

    // 通过代码方式控制进入加载更多状态
    public void beginLoadingMore() {
        mRefreshLayout.beginLoadingMore();
    }

}

更多详细用法请查看 Wiki 或者 Demo

Demo 中使用到了我的另外三个库,欢迎大家 Star 😄

关于我

个人主页 邮箱 BGA 系列开源库 QQ 群 GitHub 喵(专注于 GitHub 等一切与程序员有关的内容)
bingoogolapple.cn [email protected] BGA_CODE_CLUB GitHub喵

打赏支持

如果觉得 BGA 系列开源库对您有用,请随意打赏。如果猿友有打算购买 Lantern,可以使用我的邀请码「YFQ9Q3B」购买,双方都赠送三个月的专业版使用时间。

License

Copyright 2015 bingoogolapple

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.

bgarefreshlayout-android's People

Contributors

bingoogolapple avatar gitter-badger 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  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

bgarefreshlayout-android's Issues

可以自己指定mContentView

@Override
    public void onFinishInflate() {
        super.onFinishInflate();

        if (getChildCount() != 2) {
            throw new RuntimeException(BGARefreshLayout.class.getSimpleName() + "必须有且只有一个子控件");
        }

        mContentView = getChildAt(1);
        if (mContentView instanceof AbsListView) {
            mAbsListView = (AbsListView) mContentView;
        } else if (mContentView instanceof RecyclerView) {
            mRecyclerView = (RecyclerView) mContentView;
        } else if (mContentView instanceof ScrollView) {
            mScrollView = (ScrollView) mContentView;
        } else if (mContentView instanceof WebView) {
            mWebView = (WebView) mContentView;
        } else if (mContentView instanceof BGAStickyNavLayout) {
            mStickyNavLayout = (BGAStickyNavLayout) mContentView;
            mStickyNavLayout.setRefreshLayout(this);
        } else {
            mNormalView = mContentView;
            // 设置为可点击,否则在空白区域无法拖动
            mNormalView.setClickable(true);
        }
    }

我看到mContentView = getChildAt(1);,所以如果需要在数据加载出错的时候切换另一个视图,这个视图也支持下拉刷新的话,就没法使用如下布局了:

<cn.bingoogolapple.refreshlayout.BGARefreshLayout
        android:id="@+id/fragment_rotate_header_with_view_group_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">


            <ListView
                android:id="@+id/net_result"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:divider="@android:color/transparent"
                android:dividerHeight="0dp"
                android:gravity="center"
                android:scrollbars="none"
                tools:listitem="@layout/item_rtsp_models"
                />


            <LinearLayout
                android:id="@+id/net_progress"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:orientation="vertical">

                <ProgressBar
                    style="?android:attr/progressBarStyle"
                    android:layout_width="200dip"
                    android:layout_height="wrap_content"
                    android:indeterminate="true"
                    android:indeterminateOnly="true"
                    android:visibility="gone"/>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="数据正在加载中……"
                    android:textColor="#000000"
                    android:visibility="gone"/>
            </LinearLayout>


            <LinearLayout
                android:id="@+id/net_no_result"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:background="@android:color/transparent"
                android:orientation="vertical">

                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:background="@android:color/transparent"
                    android:src="@mipmap/no_live"
                    />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_marginTop="@dimen/height_720_1280_40"
                    android:text="没有数据"
                    android:textColor="#000000"/>

            </LinearLayout>


        </FrameLayout>

    </cn.bingoogolapple.refreshlayout.BGARefreshLayout>

而必须写成:

<FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <cn.bingoogolapple.refreshlayout.BGARefreshLayout
            android:id="@+id/fragment_rotate_header_with_view_group_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <ListView
                android:id="@+id/net_result"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:divider="@android:color/transparent"
                android:dividerHeight="0dp"
                android:gravity="center"
                android:scrollbars="none"
                tools:listitem="@layout/item_rtsp_models"
                />

        </cn.bingoogolapple.refreshlayout.BGARefreshLayout>


        <LinearLayout
            android:id="@+id/net_progress"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:orientation="vertical">

            <ProgressBar
                style="?android:attr/progressBarStyle"
                android:layout_width="200dip"
                android:layout_height="wrap_content"
                android:indeterminate="true"
                android:indeterminateOnly="true"
                android:visibility="gone"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="数据正在加载中……"
                android:textColor="#000000"
                android:visibility="gone"/>
        </LinearLayout>


        <LinearLayout
            android:id="@+id/net_no_result"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="@android:color/transparent"
            android:orientation="vertical">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:background="@android:color/transparent"
                android:src="@mipmap/no_live"
                />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginTop="@dimen/height_720_1280_40"
                android:text="没有数据"
                android:textColor="#000000"/>

        </LinearLayout>


    </FrameLayout>

而这会导致一个问题,就是切换到没有数据页面的时候,没有下拉更新的效果了。
所以可以改成手动指定mContentView吗?

下拉加载footview的问题

footview过渡不是很好,下拉到底部,然后顿下,弹出底部加载
能否不需要浮动在那里,因为有时候接口加载慢的时候,那个加载条一直都在
很喜欢这个库,希望继续优化维护,做的很不错

还有一个意见,能否加个属性,想pullrefresh一样,可以分上拉,下拉,全部,这样比较好控制

嵌套ListView时,上拉加载后焦点回到最后一个Item上。

假如我的listview现在有10个Item,当我上拉加载得到反馈后,listview的焦点会回到最后一个Item上。
当item的高度不是很高时,并没有问题。但是如果高度比屏幕高度高时,就会产生跳变。
如果我使用setSelection()方法的话也不行,焦点会先从最后一个Item上跳到新设置的上面,依然有很明显的跳变。
希望可以解决这个问题啊,多谢多谢!!!

BGARefreshLayout的Bug

当BGARefreshLayout中的子控件是ScrollView是下拉刷新后,ScrollView里面的内容上滑时,想要内容上下滑动时有问题,ScrollView下滑时是下拉刷新

请教上拉动画显示的问题

工程中只引入了
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'com.nineoldandroids:library:2.4.0'
compile 'cn.bingoogolapple:bga-refreshlayout:1.1.2@aar'
这个三个库,
刷新ViewHolder设置成 BGARefreshViewHolder refreshViewHolder = new BGANormalRefreshViewHolder(context, true);
bgaRefreshLayout.setIsShowLoadingMoreView(true);也设置为true
但是上拉刷新的 footview 显示不出来求解原因? 是否和DEMO中没有引入其他库有关系?
谢谢

建议模块化

能不能把每个效果,分包,相对独立出来,不然文件东扯西扯的,用起来也麻烦,而且有baseactiviy,引用起来扯的东西更多.android-pulltorefresh sample很明了,可以参考一下,作为普通开发人员,引用你的lib,真心觉得好累

1.1.1版本会造成闪退 、Recursive entry to executePendingTransactions

E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.IllegalStateException: Recursive entry to executePendingTransactions
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1585)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5069)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)

compile 'cn.bingoogolapple:bga-refreshlayout:1.1.1@aar'
我的主程序是ViewPager +TabLayout;ViewPager 包含fragment
其中有一个fragment 使用了BGARefreshLayout。之前用的是1.0.7版本没有问题。然后改成1.1.1就闪退了

下拉刷新头部无法出现

1.1.0版本,当嵌套recycleview时,如果第一个单元格的高度过大(超出一屏),会导致下拉刷新的头部出不来,我尝试着定位了一下问题,发现在ScrollingUtil.java(63)处,layoutManager.findFirstCompletelyVisibleItemPosition()方法获取到的值始终为-1,导致判定失效,我试着加入了==-1的判定条件,现在头部是可以出来了,但是不确定是否对其他部分会造成影响

开放返回当前状态

最好加一个返回当前的状态的方法,如getCurrentRefreshStatus~

另,现在还有些在无数据的时候显示一张图片或者其他的布局的,是否可以增加这种功能或者适配一下ViewAnimator?

不显示加载更多的View

你好,通过BGANormalRefreshViewHolder设置下拉刷新加载更多的风格时,加载更多的时候,无法显示正在加载的view,数据会显示出来,是我没使用对吗?

配合RecyclerView数据为空时会崩溃

设置代码如下

        // 为BGARefreshLayout设置代理
        bgaContent.setDelegate(this);
        // 设置下拉刷新和上拉加载更多的风格     参数1:应用程序上下文,参数2:是否具有上拉加载更多功能
        BGARefreshViewHolder refreshViewHolder = new BGANormalRefreshViewHolder(getActivity(), false);
        // 设置下拉刷新和上拉加载更多的风格
        bgaContent.setRefreshViewHolder(refreshViewHolder);

放在Fragment中使用,配合RecyclerView,数据为空时会直接崩溃,没有数据,不清楚如果有数据是否也会崩溃

11-12 14:16:15.466 16772-16772/com.mypackge.test E/RecyclerView: No layout manager attached; skipping layout
11-12 14:17:25.946 16772-16772/com.mypackge.test E/InputEventReceiver: Exception dispatching input event.
11-12 14:17:25.946 16772-16772/com.mypackge.test E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
11-12 14:17:25.946 16772-16772/com.mypackge.test E/MessageQueue-JNI: java.lang.NullPointerException
at android.support.v7.widget.RecyclerView.onInterceptTouchEvent(RecyclerView.java:1819)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1822)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1877)
at cn.bingoogolapple.refreshlayout.BGARefreshLayout.dispatchTouchEvent(BGARefreshLayout.java:443)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1877)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1877)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1877)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1877)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1877)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1877)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1877)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1925)
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1379)
at android.app.Activity.dispatchTouchEvent(Activity.java:2396)
at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:59)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1873)
at android.view.View.dispatchPointerEvent(View.java:7307)
at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3172)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3117)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4153)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4132)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4224)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:171)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:125)
at android.os.Looper.loop(Looper.java:124)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
11-12 14:17:25.946 16772-16772/com.mypackge.test D/AndroidRuntime: Shutting down VM
11-12 14:17:25.946 16772-16772/com.mypackge.test W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xa622c288)
11-12 14:17:25.946 16772-16772/com.mypackge.test E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException
 at android.support.v7.widget.RecyclerView.onInterceptTouchEvent(RecyclerView.java:1819)
 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1822)
 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1877)
 at cn.bingoogolapple.refreshlayout.BGARefreshLayout.dispatchTouchEvent(BGARefreshLayout.java:443)
 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1877)
 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1877)
 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1877)
 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1877)
 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1877)
 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1877)
 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1877)
 at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1925)
 at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1379)
 at android.app.Activity.dispatchTouchEvent(Activity.java:2396)
 at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:59)
 at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1873)
 at android.view.View.dispatchPointerEvent(View.java:7307)
 at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3172)
 at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3117)
 at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4153)
 at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4132)
 at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4224)
 at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:171)
 at android.os.MessageQueue.nativePollOnce(Native Method)
 at android.os.MessageQueue.next(MessageQueue.java:125)
 at android.os.Looper.loop(Looper.java:124)
 at android.app.ActivityThread.main(ActivityThread.java:4745)
 at java.lang.reflect.Method.invokeNative(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:511)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
 at dalvik.system.NativeStart.main(Native Method)

NoSuchMethodError: No virtual method addOnScrollListener

当我中间的View是RecyclerView的时候,报下面的错
BGARefreshLayout.java 172行
java.lang.NoSuchMethodError: No virtual method addOnScrollListener(Landroid/support/v7/widget/RecyclerView$OnScrollListener;)V in class Landroid/support/v7/widget/RecyclerView; or its super classes (declaration of 'android.support.v7.widget.RecyclerView'

BGARefreshLayout+BGAStickyNavLayout问题。求解

超出后

fda01eb6-9a57-4aa2-919d-4718fd678df3

原始图

Uploading C495D7B7-0FCD-4557-83EC-1E8ACD0C29CA.png…

当BGAStickyNavLayout 中的第一个子View高度超出屏幕的高度是,只能下拉,布局不能往上走,当在下拉的时候拖动布局是,可以看出层次错误了。

第一个子view超过屏幕高度后,超出的不显示,而且下面的布局会被遮挡,第二个和第三个会向上padding掉第一个子view超出屏幕的距离

ViewPagerDemo中viewPager中的recyclerView滑动问题

如果recyclerView中数据只有一个或者不满一屏的话,上拉加载时,recyclerView滑不上去,使得一部分数据展示不出来,如果上拉加载无数据时,会一直响应上拉加载的动作

使用ItemDecoration设置top后下滑失效

让第一个项目top设置为100后,下拉失效

mDataRv.addItemDecoration(new Divider(mApp));

public class Divider extends RecyclerView.ItemDecoration {
private Drawable mDividerDrawable;

public Divider(Context context) {
    mDividerDrawable = context.getResources().getDrawable(R.mipmap.list_divider);
}

@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
    if (parent.getChildLayoutPosition(view) == 0) {
        outRect.set(0, 100, 0, 0);
    }
}

@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
    drawVertical(c, parent);
}

}

关闭下拉加载更多bug

关闭下拉加载更多bug
在关闭了下拉加载更多之后,实际还是会触发加载加多,这里的关闭加载更多似乎只是没有显示加载更多的动画

点击好像受到下拉的影响,不好点了

下拉里面放一个listview,点击item的时候,如果不是精确点击,它会被识别成要下拉,整个界面有轻微的向下滚动,但是实际上用户是想点击,所以会出现点击没反应的情况,而用原生的listview就没这种情况,希望优化一下

fragment中使用刷新控件 上拉有问题

当在fragment中使用刷新控件时,在onActivityCreated()方法中初始化刷新控件,上拉不能实现,下拉可以,在onCreateView()中初始化刷新控件则上拉下拉都可以?BUG ????

Toolbar设置app:layout_scrollFlags="scroll|enterAlways"后,上拉view和加载更多的view不能显示

我的layout为:

<android.support.design.widget.CoordinatorLayout
android:id="@+id/rootLayout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|enterAlways"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

    <android.support.design.widget.TabLayout
        android:id="@+id/tabLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</android.support.design.widget.AppBarLayout>

<android.support.v4.view.ViewPager
    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

</android.support.design.widget.CoordinatorLayout>

在viewpager中添加fragment
fragment的layout是:

<cn.bingoogolapple.refreshlayout.BGARefreshLayout
android:id="@+id/rl_recyclerview_refresh"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.RecyclerView
    android:id="@+id/rv_recyclerview_data"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="none"/>

</cn.bingoogolapple.refreshlayout.BGARefreshLayout>

refresh布局不能正常显示,refresh view和load more view

能否添加一个加载完成后显示"没有更多了/加载完毕"的底部视图

Hi bingoogolapple :

现在加载完毕后,没有类似"没有更多/加载完毕"的底部视图,导致交互较为差劲。因为一般的app数据都是有限的,有个类似"没有更多了/加载完毕"的显示比较好。 当下拉刷新的时候 加载更多的时候 隐藏该视图, 如果能提供自定义该视图相关接口就更好了。

麻烦有时间在1.3.4版本能否添加下。 3Q

是否可以添加变量控制bgarefreshlayout是否可刷新状态

例如:bgarefreshlayout 嵌套一个ScrollView时,当ScrollView 超过一页,会导致下拉冲突。我现在解决办法时监听ScrollView状态,继承BGARefreshLayout,重写onInterceptTouchEvent方法

   @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        return canRefresh ? super.onInterceptTouchEvent(event) : false;
    }

没有设置下拉刷新不可用功能?

现在做成公共的ListActivity,部分页面需要上下拉,
部分页面只需要当成普通listview使用,禁止上下拉,
现在是没有相应方法设置下拉是否可用功能的?

双列recycleview加载更多bug

双列recycleview,加载更多时,最后一个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.