gpt4 book ai didi

java - 如何从 fragment 中的后台线程更新 UI

转载 作者:行者123 更新时间:2023-11-29 03:14:07 25 4
gpt4 key购买 nike

我有一个应用程序有一个带有 ListView 的 fragment 。我 ping 网络上的 IP 地址,当我得到响应时,我将 IP 地址添加到列表中。完成对 IP 地址的 ping 操作后,我将回复我的 ping 操作的 IP 地址列表放入 ListView。

我想要做的是在我正在执行 ping 操作时更新此 ListView,而不是在我已 ping 完所有 IP 地址后才执行此操作。要 ping IP 地址,我使用 AsyncTask,然后调用 Runnable Thread。当我找到 IP 地址时,如何告诉 Fragment 从该 Runnable 类更新 UI?

我的类的粗略布局如下。

public class FinderFragment extends ListFragment {

private void CallFind(){
new Find().execute();
}

private class Find extends AsyncTask<Void, Void, Void> {

@Override
protected Void doInBackground(Void... voids) {
SearchNetwork searchNetwork = new SearchNetwork(ipAddress);
try {
searchNetwork.StartFind();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
UpdateDeviceList();
}
}
}

public class SearchNetwork {

public void StartFind() throws InterruptedException {
Thread t[] = new Thread[20];
for(int i=0; i<02; i++){
t[i] = new Thread(new FindDevices(i*5));
t[i].start();
}
for(Thread thread : t){
thread.join();
}
}

class FindDevices implements Runnable{

@Override
public void run() {
//Ping the IP addresses here
//I want to update UI from here
}
}

最佳答案

试试这个....

getActivity().runOnUiThread(new Runnable(){
@Override
public void run(){
// Do whatever you want
}
});

关于java - 如何从 fragment 中的后台线程更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27635372/

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