如何使postDelayed按预期工作?

时间:2015-04-01 23:49:18

标签: android swipe postdelayed

所以这里是我在SwipeRefreshLayout的大多数教程中找到的方法,但它对我来说似乎完全是愚蠢的。

它的作用:它在实际执行doStuff()之前的2000毫秒内执行刷新动画。

我(显然!!)想要做的事情:刷新动画,然后doStuff()然后停止。无需计时器!难道我做错了什么 ?互联网告诉我没有...

            view.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
                @Override
                public void onRefresh() {
                    swipeEmptyView.setRefreshing(true);
                    new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            doStuff();
                            swipeEmptyView.setRefreshing(false);
                        }
                    }, 2000);
                }
            });

1 个答案:

答案 0 :(得分:1)

您的评论回复应该是一个答案。

  1. http请求的要点是在后台运行一项艰苦的工作,这就是AsyncTask的设计目标。否则,您将面临在Mainthread上运行网络请求的例外情况,请Google知道更多信息。

  2. 关于SwipeRefreshLayout,我认为它会自动显示加载动画直到您调用mSwipeLayout.setRefreshing(false)。所以这里有两种实现方式:

  3. 2.1 - 使用AsyncTask获取http请求,使用您自己的加载动画(使用或不使用SwipeRefreshLayout):

    public class MyAsyncTask<DummyStuff> extends AsyncTask<Void, Void, Void> {
    
        public void onPreExecute() {
            // start your animation here
            // NOTE: if you use SwipeRefreshLayout, it will automatically show animation when you swipe your layout down, so please consider your UX to do what you want.
        }
    
        public void onDoinBackground(Void... input) {
            // do something
            // http request or something
            return null;    // return what ever you get
        }
    
        public void onPostExecute(Void... result) {
            // stop your animation here
            // in case you use SwipeRefreshLayout, call mSRL.setRefreshing(false) here too.
        }
    }
    

    2.2用户使用您的SwipeRefreshLayout上面的任务:

    我只会展示重要的部分:

    mSRL.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            (new MyAsyncTask()).execute();
        }
    });
    

    以上只是关于应该在哪里做的想法,请亲自尝试。

    我将在稍后用真实样本更新此答案。但我希望你能在这里得到这个想法。