- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 Android 应用程序中,我想使用 SwipeRefreshLayout 刷新 ListView,并且在 onRefresh() 方法内我想为此任务创建一个新线程。由于我的刷新方法必须获取一堆文件,因此从主线程调用时它会暂时卡住应用程序,这破坏了使用 SwipeRefrehLayout 的整个目的(通知用户应用程序何时刷新以及何时完成)这样做)。
最后一部分是我遇到的问题。我想在获取文件后调用 SwipeRefreshLayout.setRefreshing(false) 来停止刷新动画。我这样做的方法是在新线程内同一刷新方法的末尾调用 setRefreshing ,但问题是我收到一条错误消息
Only the original thread that created a view hierarchy can touch its views.
我在想,如果有一种方法可以创建线程结束监听器,那将是最好的方法,但不幸的是,我已经研究了几周,但没有解决方案。
是否有每个人都使用 SwipeRefreshLayout 的明显替代方案?任何帮助将不胜感激。
这里有一些代码,以防我的解释很糟糕(这是可以理解的)
public void onRefresh() {
// This method performs the actual data-refresh operation.
//I used refreshLayout.getContext() instead of the "this" keyword since "this" would return an OnRefreshListener instead of my actual context
//I pass my refreshLayout to the constructor so it knows which to stop animating at the end.
Thread thread = new Thread (new Refresher(refreshLayout.getContext(), refreshLayout));
thread.start();
//I use this to update the adapter in my ListView after it has been refreshed by my Refresher thread.
if (listView != null)
listView.setAdapter(new CategoryListAdapter(Categories, refreshLayout.getContext()));
}
我的复习类(class):`
public class Refresher implements Runnable {
SwipeRefreshLayout refreshLayout;
Context context;
public Refresher (Context c, SwipeRefreshLayout rl) {
refreshLayout = rl;
context = c;
}
@Override
public void run() {
//Call the method that fetches the files.
((CategoryMenu) context).RefreshCategories(CategoryMenu.SaveDirectory);
//Here's where my error gets thrown.
refreshLayout.setRefreshing(false);
//I understand why, but I don't know a good workaround.
}
}
`
最佳答案
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
refreshLayout.setRefreshing(false);
}
});
尝试使用 runOnUiThread,希望这能解决您的问题
关于java - 不允许在主线程之外调用 SetRefreshing(false)。解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43981037/
我有一个非常简单的布局,但是当我在 fragment 的 onActivityCreated() 中调用 setRefreshing(true) 时,它最初不会显示。 它只在我拉动刷新时显示。任何想法
在我的 Android 应用程序中,我想使用 SwipeRefreshLayout 刷新 ListView,并且在 onRefresh() 方法内我想为此任务创建一个新线程。由于我的刷新方法必须获取一
我正在使用 SwipeRefreshLayout 来刷新我的 Activity 。布局看起来像这样,非常简单: linearLayoutFeed 在刷新时以编
我是一名优秀的程序员,十分优秀!