gpt4 book ai didi

java - 不允许在主线程之外调用 SetRefreshing(false)。解决方法?

转载 作者:行者123 更新时间:2023-12-02 13:10:14 26 4
gpt4 key购买 nike

在我的 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/

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