首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwipeRefreshLayout动画冻结onRefresh()

SwipeRefreshLayout动画冻结onRefresh()
EN

Stack Overflow用户
提问于 2015-10-04 04:17:49
回答 3查看 2.6K关注 0票数 4

当我滑动刷新SwipeRefreshLayout的动画时,它会显示出来,但是当onRefresh()运行时它会冻结,只有在onRefresh()完成时才会开始旋转。

MainActivity

代码语言:javascript
复制
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    myFAB = (FloatingActionButton) findViewById(R.id.myFAB);
    recyclerView = (RecyclerView) findViewById(R.id.rv);
    recyclerView.setHasFixedSize(true);
    LinearLayoutManager llm = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(llm);
    recyclerView.addItemDecoration(new SimpleDividerItemDecoration(this));
    callCadastroEncoemnda();
    callPackageList();
    swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);
    swipeRefreshLayout.setOnRefreshListener(this);
    swipeRefreshLayout.setColorSchemeResources(
            android.R.color.holo_blue_bright,
            android.R.color.holo_green_light,
            android.R.color.holo_orange_light,
            android.R.color.holo_red_light);
}

onRefresh:

代码语言:javascript
复制
@Override
public void onRefresh() {
    swipeRefreshLayout.setRefreshing(true);
    Update.updateAll(MainActivity.this);
    //Check if the data change
    if (!packages.equals(dao.getPackages())) {
        adapter.updateList(dao.getPackages());
    }
    swipeRefreshLayout.setRefreshing(false);
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-13 17:52:01

解决了!

我已经将刷新代码放在可运行的上:(我也更改了刷新)

代码语言:javascript
复制
@Override
public void onRefresh() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                if (Update.updateAll(MainActivity.this)) {
                    packages = dao.getPackages(config.getFilter());
                    packagesAux = dao.getPackages(config.getFilter());
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            adapter.animateTo(packages);
                        }
                    });
                }
            } catch (ExecutionException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    swipeRefreshLayout.setRefreshing(false);
                }
            });
        }
    }).start();
}
票数 2
EN

Stack Overflow用户

发布于 2015-10-04 04:33:10

代码语言:javascript
复制
    @Override
    public void onRefresh() {
         .....
        RVAdapterMain adapter = new RVAdapterMain(packages);
        recyclerView.setAdapter(adapter);
        ....
    }
    .....
}

首先,这似乎是错误的。请您在onCreate()中使用它好吗?并创建新方法,在适配器中添加新数据。当您刷新它时,onRefresh方法只使用新数据集的notifiyDataSetChanged(),而不是每次使用新适配器。

票数 0
EN

Stack Overflow用户

发布于 2015-10-04 06:23:12

您不需要在setRefreshing()方法中使用onRefresh(True)语句。当我们把Ui向下拖动时,旋转的东西就会自动启动。

只需要setRefreshing(false)就可以在达到预期结果的地方停止旋转器,而不是在onRefresh()中。

例如,如果您正在访问api,则需要在从服务器(即setRefreshing或类似的服务器)获得响应时使用onPostExecute (False)。

以下是我如何使用它:

代码语言:javascript
复制
/**
 * on Refreshing, fetch trip history again.
 */
@Override
public void onRefresh() {

    fetchTripHistory();

}

@Override
        public void onFailOfResponse(Object... arguments) {

            mSwipeRefreshLayout.setRefreshing(false);

            noDataText.setVisibility(View.VISIBLE);



        }
    };
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32929982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档