当通过适配器打开 sub-Activity 时,将数据从 MainActivity 传递到 sub-Activity?
Passing data from MainActivity to sub-Activity when sub-Activity is opened through an Adapter?
所以我的标题可能很难理解,但我会尝试在下面阐明和扩展我的问题。
我目前有一个应用程序,它的生命周期是 MainActivity,ViewPager 中有多个 Fragment。
在 MainActivity 中,我有 Android In-App Billing V3(图书馆)设置,以便用户可以付费删除广告。这在 MainActivity 中工作得很好,但当移动到另一个 Activity 时我的问题出现了。
用户在启动应用程序时看到的第一个片段包含一个 RecyclerView 和一个 ArrayList 项目。要从 MainActivity 获取 sub-Activity,用户在 RecyclerView 中的一项上按下按钮,这意味着用于更改 Activity 的 Intent 数据包含在 RecyclerViewAdapter 中。
我的问题是,一旦我的应用知道用户已付费移除广告,我希望该应用也移除所有 sub-Activities 中的广告。
我不知道如何从 Activity -> sub-Activity 传递此信息("Remove Ads" in-app 已购买) ,当 sub-Activity 改为通过 RVAdapter 启动时。
所以我的问题是:我将如何从 MainActivity -> RVAdapter -> Sub-Activity?
传递数据
或者是否有更好、更有效的方式在不使用 Intents 的情况下传递这些数据?请告诉我!
我对问题的描述是否有意义?希望如此!否则让我知道我如何澄清它!如果您需要我粘贴任何代码,也请告诉我。
感谢您的帮助!
您可以使用 EventBus (greenrobot) 不错的库来发送事件 linke
发送事件
添加库后,将下面的方法添加到您的主程序中 activity:
@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);
}
终于 post 你的活动来自世界各地,就像你的子activity :
EventBus.getDefault().postSticky(new MessageEvent());
注意:我添加了postSticky();将数据缓存在内存中,然后可以将粘性事件传递给订阅者或显式查询。
更好的解决方案
但我认为您可以在购买后在 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();
所以我的标题可能很难理解,但我会尝试在下面阐明和扩展我的问题。
我目前有一个应用程序,它的生命周期是 MainActivity,ViewPager 中有多个 Fragment。
在 MainActivity 中,我有 Android In-App Billing V3(图书馆)设置,以便用户可以付费删除广告。这在 MainActivity 中工作得很好,但当移动到另一个 Activity 时我的问题出现了。
用户在启动应用程序时看到的第一个片段包含一个 RecyclerView 和一个 ArrayList 项目。要从 MainActivity 获取 sub-Activity,用户在 RecyclerView 中的一项上按下按钮,这意味着用于更改 Activity 的 Intent 数据包含在 RecyclerViewAdapter 中。
我的问题是,一旦我的应用知道用户已付费移除广告,我希望该应用也移除所有 sub-Activities 中的广告。
我不知道如何从 Activity -> sub-Activity 传递此信息("Remove Ads" in-app 已购买) ,当 sub-Activity 改为通过 RVAdapter 启动时。
所以我的问题是:我将如何从 MainActivity -> RVAdapter -> Sub-Activity?
传递数据
或者是否有更好、更有效的方式在不使用 Intents 的情况下传递这些数据?请告诉我!
我对问题的描述是否有意义?希望如此!否则让我知道我如何澄清它!如果您需要我粘贴任何代码,也请告诉我。
感谢您的帮助!
您可以使用 EventBus (greenrobot) 不错的库来发送事件 linke
发送事件
添加库后,将下面的方法添加到您的主程序中 activity:
@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);
}
终于 post 你的活动来自世界各地,就像你的子activity :
EventBus.getDefault().postSticky(new MessageEvent());
注意:我添加了postSticky();将数据缓存在内存中,然后可以将粘性事件传递给订阅者或显式查询。
更好的解决方案
但我认为您可以在购买后在 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();