我正在使用来自chrisbanes的PullToRefresh ListView,我发现here。
由于其文档,我成功实施了它。 :)
然而,我现在陷入了这一点。我正在使用凌空从服务器获取数据。它工作得很好,直到我添加一个检查,看看是否没有更多的数据然后只是Toast用户。
我确实喜欢下面,
@Override
public void onRefresh(
PullToRefreshBase<ListView> refreshView) {
if (hasMoreData()){
//Call service when pulled to refresh
orderService();
} else{
// Call onRefreshComplete when the list has been refreshed.
toastShort("No more data to load");
orderListAdapter.notifyDataSetChanged();
mPullRefreshListView.onRefreshComplete();
}
}
吐司出现了,但我也继续在ListView下面看到正在加载... 消息。我认为onRefreshComplete();
应该照顾它,但事实并非如此。
我该怎么做?请帮忙。
答案 0 :(得分:3)
在我的头撞了近3个小时后,我能够解决这个问题。这很简单。
我所做的是创建了一个Handler和一个Runnable,它调用mPullRefreshListView.onRefreshComplete();
并在一段时间后检查如果mPullRefreshListView
仍然刷新,则再次调用该方法,在下次调用时关闭它。 :)
代码就是这样......
@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
if (hasMoreData()) {
// Call service when pulled to refresh
toastShort("Last");
orderService();
} else {
// Call onRefreshComplete when the list has been
// refreshed.
toastShort("No more data to load");
upDatePull(); //this method does the trick
}
}
private void upDatePull() {
// lvOrders.setAdapter(null);
handler = new Handler();
handler.postDelayed(runnable, 1000);
}
Runnable runnable = new Runnable() {
@Override
public void run() {
mPullRefreshListView.onRefreshComplete();
if (mPullRefreshListView.isRefreshing()) {
Logger.d("xxx", "trying to hide refresh");
handler.postDelayed(this, 1000);
}
}
};
的信用
答案 1 :(得分:0)
你应该在一个单独的线程中使用onRefreshComplete();
,如:
@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
if (hasMoreData()){
//Call service when pulled to refresh
orderService();
} else{
toastShort("No more data to load");
orderListAdapter.notifyDataSetChanged();
}
new GetDataTask(refreshView).execute();
}
public class GetDataTask extends AsyncTask<Void, Void, Void> {
PullToRefreshBase<?> mRefreshedView;
public GetDataTask(PullToRefreshBase<?> refreshedView) {
mRefreshedView = refreshedView;
}
@Override
protected Void doInBackground(Void... params) {
// Do whatever You want here
return null;
}
@Override
protected void onPostExecute(Void result) {
mRefreshedView.onRefreshComplete();
super.onPostExecute(result);
}
}