ChrisBanes PullToRefresh 'Loading…' issue

江枫思渺然 提交于 2020-01-11 05:59:09

问题


I am using PullToRefresh ListView from chrisbanes which I found here.

I implemented it successfully, thanks to its documentations. :)

However, I am stuck at this one point now. I am using volley to get the data from the server. It works perfectly till I added a check to see if theres no more data then simply Toast the user.

I did like below,

@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();

    }
}

The toast comes up, but I also continue seeing the Loading... message below my ListView. I thought onRefreshComplete(); should take care of it but it didn't.

How do I do this? Please help.


回答1:


After banging my head for almost 3hours I was able to solve this. It was quite simple tough.

What I did was created a Handler and a Runnable which calls mPullRefreshListView.onRefreshComplete(); and checked after some time that if mPullRefreshListView was still refreshing then call the method again which closes it on the next call. :)

Code goes like this..

@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);
    }
}
};

Credits to this link.




回答2:


you should use onRefreshComplete(); in a separate thread like:

    @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);
    }
}


来源:https://stackoverflow.com/questions/22908085/chrisbanes-pulltorefresh-loading-issue

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!