Я реализовал REST api (с использованием Retrofit2, вероятно, неуместно), вызываемый в MainActivity. Я сохранил результаты в частных полях в MainActivity. Один пример фрагмента:
public class MainActivity extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
private String mSystemName;
mSystemName = response.body().getName();
Из MainActivity я передаю поля как параметры методам фрагмента (настраивается с помощью NavigationUI.setupActionBarWithNavController), где они будут отображаться. Например,
HomeFragment.setName(mSystemName);
В моем фрагменте у меня есть:
public class HomeFragment extends Fragment {
public static void setName(String name){
homeViewModel.SetName(name);
}
Если я не сделаю setName stati c, то я получу ошибку «non-stati c method setName На (String) нельзя ссылаться из контекста stati c ". Хотя не явно, но я предполагаю, что MainActivity по определению является stati c?
У меня есть тот, где я не могу сделать его stati c, так как внутри метода есть ссылки в Android библиотеки, которые не являются статическими c методами, например
TextView(getActivity())
Есть ли у меня способ передачи информации между MainActivity (где я выполняю работу по получению данных из удаленной системы) во фрагмент (для отображения) неправильно?
Я могу придумать несколько разных способов сократить это (но я не уверен, что какой-либо из них или какой из них будет рекомендованным):
- Выполняйте работу во фрагменте, но позже мне могут понадобиться разные представления в разных фрагментах, поэтому имеет смысл, что я собираю данные в MainActivity.
- Хранить данные по-другому и каким-то образом запускать фрагмент для обновлять себя, в идеале, когда данные изменяются, но это также может быть с некоторым вызовом.
- Отправлять данные во фрагмент, а не отправлять их t Метод, который должен отображать это, чтобы фрагмент осознал, что он должен это сделать, как только данные будут сохранены. Это было бы немного похоже на то, как у моей MainActivity есть прослушиватель onSharedPreferenceChanged для изменения настроек пользователя.
- Получить фрагмент для запроса данных из MainActivity (но я думал, что фрагменты не должны полагаться на MainActivity, хотя это кажется, это наиболее часто задаваемый вопрос, связанный с моим).