繁体   English   中英

拉起来在android RecyclerView中刷新

[英]Pull up to refresh in android RecyclerView

我按照以下方式使用了v4支持库的SwipeRefreshLayout:

 swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            refreshItems();
        }
    });

   void refreshItems() {
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            swipeRefreshLayout.setRefreshing(false);
        }
    }, 3000);
}

在此策略中,如果我在第一个列表项可见时下拉屏幕,则调用onRefresh()方法。

在此输入图像描述

这称为下拉刷新。 但我想要相反的效果。 也就是说,如果我在最后一个列表项可见时拉起屏幕,那么应该调用一个方法,或者应该通知它。 可能吗? 如果可能的话请给我路。

你自己说,你使用SwipeRefreshLayout ..它用于刷卡刷新,它没有设计/能够实现你的目标。

我看到它的方式你必须编写自己的自定义视图。

在您的Adapter类的RecyclerView / ListView中,在膨胀最后一项时,您可以放置​​if语句并调用方法。

如果您使用RecyclerView代码: -

private boolean loading = true;
int pastVisiblesItems, visibleItemCount, totalItemCount;

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() 
{
    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) 
    {
        if(dy > 0) //check for scroll down
        {
            visibleItemCount = mLayoutManager.getChildCount();
            totalItemCount = mLayoutManager.getItemCount();
            pastVisiblesItems = mLayoutManager.findFirstVisibleItemPosition();

            if (loading) 
            {
                if ( (visibleItemCount + pastVisiblesItems) >= totalItemCount) 
                {
                    loading = false;
                    Log.v("...", "Last Item Wow !");
                    //Do pagination.. i.e. fetch new data
                }
            }
        }
    }
});

还添加以下代码: -

LinearLayoutManager mLayoutManager;
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);

那么,您可以检查何时到达列表的最后一项并触发动画+更新。

在Android应用程序中,只要我们需要通过垂直滑动手势刷新视图的内容,就会使用Pull To Refresh aka SwipeRefreshLayout。 它只接受一个子项意味着我们要刷新的组件。 它使用侦听器机制来通知持有此组件的侦听器已发生刷新事件...

基本的Pull To Refresh / SwipeRefreshLayout XML代码:

<android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/simpleSwipeRefreshLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        < Add View's Here..../>

</android.support.v4.widget.SwipeRefreshLayout>

有关http://abhiandroid.com/materialdesign/pulltorefresh中的示例,请参阅更多内容。

这是我对Vishwesh的答案的版本

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                // Prevents Swipe to Refresh if only scrolling up.  
                LinearLayoutManager llm = (LinearLayoutManager) recyclerView.getLayoutManager();
                int pos = llm.findFirstCompletelyVisibleItemPosition();
                if( pos != 0){
                    swipeRefresh.setEnabled(false);
                    swipeRefresh.setRefreshing(false);
                }
                else
                {
                    swipeRefresh.setEnabled(true);
                }
            }
        });

我得到了相同的问题。在Refresh()方法中我再次初始化了回收视图和'无尽的Scroll Listener'它对我有用

@Override
  public void onRefresh() {
   Adapter = new Adapter(this, List, );
    recyclerView.setLayoutManager(LayoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(Adapter);
    loadMoreData();

    recyclerView.addOnScrollListener(new EndlessRecyclerOnScrollListener() {
        @Override
        public void onLoadMore() {
            loadMoreData();
        }
    });}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM