У меня есть приложение, имеющее фрагмент с ListView. Я ping IP-адреса в сети, и когда я получаю ответ, я добавляю IP-адрес в список. Как только я закончил pinging IP-адреса, я поместил этот список IP-адресов, которые ответили на мой пинг в ListView.Как обновить пользовательский интерфейс из фонового потока во фрагменте
Что я хочу сделать, это обновить этот ListView, поскольку я пингую, а не после того, как я пинговал все IP-адреса. Для ping IP-адресов я использую AsyncTask, который затем вызывает Runnable Thread. Как сообщить Фрагменту об обновлении пользовательского интерфейса из этого класса Runnable, когда я нахожу IP-адрес?
Грубая раскладка моих классов ниже.
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'? –
используйте обработчик вместо него, пожалуйста, обратитесь к описанию threadSample google sample.https: //developer.android.com/training/multiple-threads/communicate-ui.html – mcd