gpt4 book ai didi

android - 保持 SwipeRefreshLayout 显示,直到服务完成运行

转载 作者:行者123 更新时间:2023-11-30 01:39:11 24 4
gpt4 key购买 nike

所以现在我可以在我的应用程序中滑动刷新。当它被激活时,一个运行异步后台任务的服务被执行。问题是,滑动刷新指示器会立即消失。当服务完成运行时,我如何保持它显示(并更新我的回收站 View )?这是一些代码:

        mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.activity_main_swipe_refresh_layout);
mSwipeRefreshLayout.setColorSchemeResources(R.color.StatusbarColor,R.color.Accent);

mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
db = new DatabaseHelper(getApplicationContext());
callRefreshService();

}
});

这里是 callRefreshService 方法:

public void callRefreshService() {
try{
Intent service = new Intent(getApplicationContext(), UpdateScoresService.class);
startService(service);
}
finally {
list.clear();
list.addAll(db.getTracked());
db.closeDB();
adapter.notifyDataSetChanged();
mSwipeRefreshLayout.setRefreshing(false);
}
}

如您所见,我尝试使用 try 和 finally,但这没有帮助。

最佳答案

startService(Intent) 不阻塞,它立即返回。

你有两个选择:

  1. 为 AsyncTask 放弃服务
  2. 允许服务与您的 Activity 通信

对于像一次性 JSON 下载任务这样的琐碎事情,选择 1。在 onPostExecute (Result result) block 中调用 mSwipeRefreshLayout.setRefreshing(false)

如果您已经进行了一些复杂的设置,请选择 2。Activity 和 Service 之间的通信稍微有点复杂,你需要的是一个 bind service .如果你想要一些简单的东西,你可以看看事件总线,它很好地解耦了事情。

下面是事件总线的一些实现:

关于android - 保持 SwipeRefreshLayout 显示,直到服务完成运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34733247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com