通过适配器打开子活动时,将数据从MainActivity传递到子活动?

时间:2018-06-04 21:55:38

标签: android android-fragments android-intent in-app-purchase android-adapter

所以我的标题可能难以理解,但我会尝试澄清并扩展我的问题。

  • 我目前有一个应用程序,它作为MainActivity开始,其中有多个Fragment位于ViewPager中。

  • 在MainActivity中,我设置了Android In-App Billing V3(库)设置,以便用户付费删除广告。这在MainActivity中运行得很好但是在转移到另一个Activity时出现了问题。

  • 启动应用程序时,用户看到的第一个片段包含带有项目ArrayList的RecyclerView。要从MainActivity访问子活动,用户按下RecyclerView中其中一个项目上的按钮,这意味着用于更改活动的Intent数据包含在RecyclerViewAdapter中。

  • 我的问题是,一旦我的应用知道用户付费删除广告,我希望该应用也可以删除所有子活动中的广告。

  • 我不知道如何通过活动传递此信息("移除广告"应用内购买) - >子活动,当通过RVAdapter启动子活动时。

  • 所以我的问题是:我如何从MainActivity传递数据 - > RVAdapter - >子活动?

  • 或者是否有一种更好,更有效的方法来传递这些数据而不使用Intents?请告诉我!

我对这个问题的描述是否有意义?希望如此!否则请告诉我如何澄清它!如果您需要我粘贴任何代码,请告诉我。

感谢您的任何帮助!

1 个答案:

答案 0 :(得分:1)

你可以使用EventBus(greenrobot)漂亮的库来发送事件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();将数据缓存在内存上,然后粘性事件可以传递给订阅者或明确查询。

更好的解决方案

但我认为你可以在purcahse之后在Sharedpreferences中节省价值:

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

然后检查onCreat方法上每个Activity的值 显示添加或不添加

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

    show();
 }else dontShow();