У меня есть ListView
со специальным адаптером, и он показывает список Wi-Fi вокруг меня. Когда нажимается один элемент, я показываю диалог с подробностями. Диалог представляет собой пользовательский класс, производный от DialogFragment
, и отображается с помощью этого кода после завершения сканирования Wi-Fi:
private class WifiScanReceiver extends BroadcastReceiver {
public void onReceive(Context c, Intent intent) {
List<ScanResult> wifiScanList = wifi.getScanResults();
Log.i("WifiAnal", "rec");
lv.setAdapter(new WifiListAdapter(getApplicationContext(), R.layout.itemlistrow, wifiScanList));
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ScanResult listItem = (ScanResult)lv.getItemAtPosition(position);
WifiDetailsDialogFragment d = new WifiDetailsDialogFragment();
// Supply num input as an argument.
Bundle args = new Bundle();
args.putString("ssid", listItem.SSID);
d.setArguments(args);
d.show(getSupportFragmentManager(), "fir");
// TODO: PUT ASYNC CALL HERE AND PROCESS FETCHED DATA.
// TODO: SHOW ASYNC RESULT ON OPEN DIALOG
}
});
mSwipeRefreshLayout.setRefreshing(false);
}
}
Мой класс WifiDetailsDialogFragment
заботится о том, чтобы раздуть его макет xml и правильно отобразить его поверх приложения с помощью кнопки «ОК».
Теперь представьте, что я показываю диалог, и теперь я хочу запустить фоновую задачу (скажем, получить дополнительные сведения из БД на внешнем сервере), и после того, как я закончу, если диалог все еще открыт, поместите результат в его макет (вероятно, манипулировать значениями некоторых уже существующие и раздутые TextViews). Если к тому времени он будет закрыт, ничего не делайте.
Как я могу получить доступ к своим виджетам макета из процесса, работающего в фоновом режиме, инициированного onItemClick? Я пробовал d.getView()
, но это возвращает null
. Правильно ли как-то через FragmentManager
? Я не хочу рисовать новый диалог, а редактировать уже существующие.
Спасибо!