Как обновить не показывая фрагменты - PullRequest
1 голос
/ 26 апреля 2019

Я занимаюсь разработкой приложения для Android, которое время от времени получает информацию с локального сервера. Для навигации в приложении я выбрал навигационную панель, которая заменяет выбранные фрагменты на

getSupportFragmentManager().beginTransaction().replace(R.id.flContent, fragment).addToBackStack(null).commit();

добавление выбранного фрагмента в backStack для правильной навигации по BackPress.

Фрагменты инициализируются в моей MainActivity в

  private OverviewFragment overviewFragment;
  private IncidentFragment incidentFragment;
  private SettingsFragment settingsFragment;

protected void onCreate(){
  ...
  overviewFragment = new OverviewFragment();
  incidentFragment = new IncidentFragment();
  settingsFragment = new SettingsFragment();
  ...
}

Теперь я хочу обновить TextView из информации, полученной с сервера. Я попробовал это с помощью метода фоллинга:

public void setIncidentDetails(NetworkIncident incident) {
        if (incident != null) {
            ArrayList<String> medicNames = null;

            ((TextView) view.findViewById(R.id.inLocationText)).setText(incident.getLocation());
            ((TextView) view.findViewById(R.id.inKeywordText)).setText(incident.getKeyword());
            if(incident.isEmsCalled()) {
                ((TextView) view.findViewById(R.id.inEmsText)).setText("Rettungsdienst alarmiert");
            } else {
                ((TextView) view.findViewById(R.id.inEmsText)).setText("Kein Rettungsdienst alarmiert");
            }
            for (int i = 0; i < incident.getMedics().size(); i++){
                medicNames = new ArrayList<String>();
                NetworkMedic currentMedic = incident.getMedics().get(i);
                medicNames.add(currentMedic.getForename() + " " + currentMedic.getSurename());
            }
            ((TextView) view.findViewById(R.id.inMedicText)).setText(medicNames.toString());
        }
    }

Это работает, только если я ранее открыл фрагмент, содержащий TextViews. В противном случае я получаю исключение NullPointerException для "view.findViewById ...". Очевидно, потому что он не был инициализирован раньше;)

У меня вопрос, есть ли другой способ обновить TextView, если фрагмент не отображается (другой фрагмент выбран в NavigatinoDrawer) или если он даже не был выбран.

(Может быть, какой-то глобальный файл ресурсов, из которого фрагмент извлекает информацию о Create / onResume)?

...