刷新轮冻结,直到onRefresh()完成

时间:2018-05-27 14:04:44

标签: android swiperefreshlayout

当我向上滑动以刷新ListView时,我使用performClick()执行单击,但是轮子会冻结,直到执行onClickListener下的所有内容。

btini.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View v) {

            //Code here
            refreshlistmain.setRefreshing(false);

refreshlistmain.setOnRefreshListener(
                    new SwipeRefreshLayout.OnRefreshListener() {
                        @Override
                        public void onRefresh() {
                            btini.performClick();
                        }
                    }
            );

由于onClick()下的代码很长,因此轮子在消失之前会保持冻结状态几秒钟。

我该如何解决?

2 个答案:

答案 0 :(得分:0)

此代码安排错误。这是一个递归调用。每次点击都会注册一个新的SwipeRefreshLayout.OnRefreshListener。就像下面一样使用它。执行长时间运行的任务,然后最后调用refreshlistmain.setRefreshing(false);。如果长时间运行的任务在工作线程上,那么您需要等待它完成。

btini.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
         // Do stuff
            refreshlistmain.setRefreshing(false);
        }
    });
    refreshlistmain.setOnRefreshListener(
            new SwipeRefreshLayout.OnRefreshListener() {
                @Override
                public void onRefresh() {
                    btini.performClick();
                }
            }
    );

答案 1 :(得分:0)

这是因为你在UI线程上有一些很长的任务。它不仅不会冻结SwipeToRefreshLayout,也不会冻结任何动画或ProgressBar你得到的动画。

<强>解决方案

AsyncTask或其他主题中放置您的任务(按钮点击后您正在执行的操作)。哪个将以异步方式运行。