在 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..
它用于滑动刷新,
这不是 designed/capable 来实现你的目标。
按照我的看法,您必须编写自己的自定义视图。
在 RecyclerView/ListView 的适配器 class 中,在膨胀最后一项时,您可以放置 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。它只接受一个 child 表示我们要刷新的组件。它使用监听器机制通知持有该组件的监听器发生了刷新事件...
基本下拉刷新/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() 方法中,我再次初始化了回收视图,'endless 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();
}
});}
我已经按照以下方式使用了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.. 它用于滑动刷新, 这不是 designed/capable 来实现你的目标。
按照我的看法,您必须编写自己的自定义视图。
在 RecyclerView/ListView 的适配器 class 中,在膨胀最后一项时,您可以放置 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。它只接受一个 child 表示我们要刷新的组件。它使用监听器机制通知持有该组件的监听器发生了刷新事件...
基本下拉刷新/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() 方法中,我再次初始化了回收视图,'endless 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();
}
});}