【问题标题】:ChrisBanes PullToRefresh 'Loading...' issueChrisBanes PullToRefresh“正在加载...”问题
【发布时间】:2015-04-29 22:19:07
【问题描述】:

我正在使用来自 chrisbanes 的 PullToRefresh ListView,我发现 here

感谢它的文档,我成功地实现了它。 :)

但是,我现在被困在这一点上。我正在使用 volley 从服务器获取数据。在我添加检查以查看是否没有更多数据之前,它运行良好,然后简单地向用户敬酒。

我确实喜欢下面,

@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 下方看到 Loading... 消息。我认为onRefreshComplete(); 应该照顾它,但它没有。

我该怎么做?请帮忙。

【问题讨论】:

    标签: android android-listview


    【解决方案1】:

    在敲了我近 3 个小时的头后,我终于解决了这个问题。这很简单,很艰难。

    我所做的是创建一个处理程序和一个调用mPullRefreshListView.onRefreshComplete(); 的 Runnable,并在一段时间后检查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.

    【讨论】:

    • 您能否分享您的代码,并可能提供更多详细信息,您正在做什么以及正在发生的事情
    【解决方案2】:

    您应该在单独的线程中使用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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      相关资源
      最近更新 更多