#android #kotlin
#Android #kotlin
Вопрос:
Я создаю приложение, в котором в основном действии есть окно поиска и нижняя навигация. В окне поиска пользователь выбирает местоположение, а затем отправляет запрос в weather API. Я хочу передать объект, который является ответом от API, всем фрагментам в моем приложении. Какой самый простой способ сделать это?
Комментарии:
1. вы хотите передавать данные из activity во fragment или из fragment во fragment?
2. вы также можете изучить шину событий
3. если вы используете это во всем приложении, то лучше всего сохранить модель ответа в локальной базе данных, такой как room, Realm или shared prefrence, и использовать ее в любом месте приложения, и если вам нужен экран меньше 3 или 4, чем просто передать намерение или объединить всю модель ответа
4. От действия к фрагменту
Ответ №1:
- Вы можете использовать a
ViewModel
для хранения ваших данных. Кроме того, с помощьюMutableLiveData
вы можете динамически обновлять свой пользовательский интерфейс в соответствии с изменениями модели. - Используйте RxJava для создания
EventBus
объекта, который может содержатьBehaviorSubject
последние опубликованные данные. Опять же, вы можете подписаться на эти данные и автоматически обновлять свой пользовательский интерфейс. - Используйте комнату или область для хранения данных, если вам нужно местоположение между несколькими сеансами приложения.
Ответ №2:
Вам нужно отправить весь объект через это в вашем приложении и получить к нему доступ в любом месте, где вы хотите
- Шаг 1: Сохраните ваши данные в списке, который вам должен понравиться:
ArrayList<FeaturedProductDataModel> featuredProductsDataModelArrayList; ///////////get data and store in ArrayList/////////////////// featuredProductsDataModelArrayList = new ArrayList<(listofhome.getFeaturedProducts());
- Шаг 2:
Объявите общие предпочтения и поместите в них данные для дальнейшего использования во всех приложенияхfeaturetopprefernce = getActivity().getSharedPreferences("homelist", Context.MODE_PRIVATE);
Общие ссылки.Редактор prefsEditor = featuretopprefernce.edit();
// Установите значения
Gson gson = новый Gson();
Строка listofbusiness = gson.toJSON(featuredProductsDataModelArrayList); prefsEditor.putString(«featuredProductsDataModelArrayList», список бизнесов);
prefsEditor.apply();
- Шаг 3:
При получении действия или фрагмента создайте список и поместите в него данные
ArrayList<FeaturedProductDataModel> dataModelArrayList;
SharedPreferences featuredprefernce;
featuredprefernce = getActivity().getSharedPreferences("homelist", Context.MODE_PRIVATE);
featuredlist = featuredprefernce.getString("featuredProductsDataModelArrayList",null);
Gson gson = new Gson();
Type type = new TypeToken<List<FeaturedProductDataModel>>(){}.getType();
dataModelArrayList = gson.fromJson(featuredlist, type);
Вы получите свои данные в dataModelArrayList, теперь используйте их по своему усмотрению.
Ответ №3:
На самом деле, у вас есть несколько вариантов:
- Для сохранения полученных данных в локальной базе данных (вы можете использовать Room из Jetpack). А затем загружать данные из базы данных на экран, который вам нужен отдельно.
- Или вы можете сохранить данные в памяти: это может быть что-то вроде контейнера DI.
- Кроме того, вы можете использовать кэширование RxJava или модифицированное кэширование.
Второе решение для вас самое простое.