Передача данных из MainActivity в sub-Activity, когда под-Activity открывается через адаптер? - PullRequest
0 голосов
/ 05 июня 2018

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

  • В настоящее время у меня есть приложение, которое начинает свою жизнь какMainActivity с несколькими фрагментами, сидящими в ViewPager.

  • В MainActivity у меня есть настройка Android In-App Billing V3 (библиотека), чтобы пользователь мог платить за удаление рекламы.Это прекрасно работает в MainActivity, но моя проблема возникает при переходе к другому действию.

  • Первый фрагмент, представленный пользователю при запуске приложения, содержит RecyclerView с ArrayList элементов.Чтобы перейти к дочернему действию из MainActivity, пользователь нажимает кнопку на одном из элементов в RecyclerView, что означает, что данные намерений, используемые для изменения действий, содержатся в RecyclerViewAdapter.

  • Моя проблема в том, что, как только мое приложение узнает, что пользователь заплатил за удаление рекламы, я хочу, чтобы приложение также удаляло объявления во всех подэкранах.

  • Я не знаю, как передать эту информацию (о том, что в приложении было приобретено приложение «Удалить рекламу») из Activity -> sub-Activity, когда запускается sub-Activityвместо этого через RVAdapter.

  • Итак, мой вопрос: как бы я передавал данные из MainActivity -> RVAdapter -> Sub-Activity?

  • Или есть четноелучший, более эффективный способ передачи этих данных без использования Intents?Дайте мне знать!

Имеет ли смысл описание проблемы?Я надеюсь, что это так!В противном случае, дайте мне знать, как я могу это уточнить!Если вам нужно, чтобы я вставил любой код, дайте мне знать.

Спасибо за любую вашу помощь!

1 Ответ

0 голосов
/ 05 июня 2018

вы можете использовать симпатичную библиотеку EventBus (greenrobot) для отправки события this linke

для отправки evnts

после добавления библиотеки.в свою основную деятельность:

@Subscribe(threadMode = ThreadMode.MAIN)  
public void onMessageEvent(MessageEvent event) 

не забывайте о регистрации и отмене регистрации подписчика, сделайте это так:

 @Override
public void onStart() {
 super.onStart();
 EventBus.getDefault().register(this);
}

 @Override
public void onStop() {
 super.onStop();
 EventBus.getDefault().unregister(this);
}

наконец опубликуйте ваше событие отовсюду, как ваша активность:

EventBus.getDefault().postSticky(new MessageEvent());

Примечание: я добавляю postSticky ();для кэширования данных в памяти, затем событие sticky может быть доставлено подписчикам или запрашиваться явно.

лучшее решение

но я думаю, что вы можете сохранить значение в Sharedpreferences после purcahse:

SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, 
 MODE_PRIVATE).edit();
 editor.putBoolean("pay", true);
 editor.apply();

, затем проверяйте это значение в каждом действии в методе onCreat, чтобы показать, добавляет или нет

SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
pay = prefs.getBoolean("pay", false);
if (pay) {

    show();
 }else dontShow();
...