Как общаться от активности к фрагменту? - PullRequest
0 голосов
/ 14 мая 2019

Я понимаю, что использование interface является обычным способом связи от Fragment до Activity. Тем не менее, каковы хорошие практики для общения от Activity до Fragment?

В моем проекте мои Activity хосты 3 Fragments используют ViewPager. Мой Activity в настоящее время прослушивает с внутреннего сервера, и я бы хотел как-то уведомить мой 3 Fragments всякий раз, когда я получаю обновление от внутреннего сервера. Я попытался реализовать подход interface, но это уже кажется хлопотным, поскольку у меня уже возникают трудности с получением ссылок на мои 3 фрагмента в моей деятельности, поскольку фрагменты создаются в отдельном классе, который является подклассом FragmentPagerAdapter.

Есть ли лучший / более чистый способ использования interace для связи от Activity до Fragment?

1 Ответ

2 голосов
/ 14 мая 2019

Вы можете попробовать ViewModel для связи между фрагментами, и это официальная документация для Android. Вот ссылка, которую вы можете прочитать. Обмен данными между фрагментами А вот блог для чтения о реальных данных ссылка

вот пример

public class SharedViewModel extends ViewModel {
    private final MutableLiveData<Item> selected = new MutableLiveData<Item>();

    public void select(Item item) {
        selected.setValue(item);
    }

    public LiveData<Item> getSelected() {
        return selected;
    }
}

public class MasterFragment extends Fragment {
    private SharedViewModel model;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
        itemSelector.setOnClickListener(item -> {
            model.select(item);
        });
    }
}

public class DetailFragment extends Fragment {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SharedViewModel model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
        model.getSelected().observe(this, { item ->
           // Update the UI.
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...