Как мне передать динамические c обновления данных из MainActivity во фрагмент, не делая методы фрагмента stati c? - PullRequest
0 голосов
/ 09 июля 2020

Я реализовал 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 (где я выполняю работу по получению данных из удаленной системы) во фрагмент (для отображения) неправильно?

Я могу придумать несколько разных способов сократить это (но я не уверен, что какой-либо из них или какой из них будет рекомендованным):

  1. Выполняйте работу во фрагменте, но позже мне могут понадобиться разные представления в разных фрагментах, поэтому имеет смысл, что я собираю данные в MainActivity.
  2. Хранить данные по-другому и каким-то образом запускать фрагмент для обновлять себя, в идеале, когда данные изменяются, но это также может быть с некоторым вызовом.
  3. Отправлять данные во фрагмент, а не отправлять их t Метод, который должен отображать это, чтобы фрагмент осознал, что он должен это сделать, как только данные будут сохранены. Это было бы немного похоже на то, как у моей MainActivity есть прослушиватель onSharedPreferenceChanged для изменения настроек пользователя.
  4. Получить фрагмент для запроса данных из MainActivity (но я думал, что фрагменты не должны полагаться на MainActivity, хотя это кажется, это наиболее часто задаваемый вопрос, связанный с моим).

1 Ответ

0 голосов
/ 09 июля 2020

Вы можете отправить данные во фрагмент из активности с помощью пакета:

Bundle bundle = new Bundle();
bundle.putString("exampleDataKey", "exampleDataValue");
HomeFragment homeFragment = new HomeFragment();
homeFragment.setArguments(bundle);

Метод onCreateView фрагмента:

String exampleDataValue = getArguments().getString("exampleDataKey");    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...