ChrisBanes PullToRefresh' Loading ...'问题

时间:2014-04-07 09:10:16

标签: android android-listview

我正在使用来自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();应该照顾它,但事实并非如此。

我该怎么做?请帮忙。

2 个答案:

答案 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);
    }
}
};

this link.

的信用

答案 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);
    }
}