【问题标题】:Passing data from MainActivity to sub-Activity when sub-Activity is opened through an Adapter?通过适配器打开子Activity时将数据从MainActivity传递给子Activity?
【发布时间】:2018-06-04 21:55:38
【问题描述】:

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

  • 我目前有一个应用程序,它以 MainActivity 的形式开始其生命,其中多个 Fragment 位于 ViewPager 中。

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

  • 用户在启动应用程序时看到的第一个 Fragment 包含一个 RecyclerView 和一个 ArrayList 项目。要从 MainActivity 获取子 Activity,用户在 RecyclerView 中的一项上按下按钮,这意味着用于更改 Activity 的 Intent 数据包含在 RecyclerViewAdapter 中。

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

  • 当通过 RVAdapter 启动子 Activity 时,我不知道如何从 Activity -> 子 Activity 传递此信息(已购买应用内的“删除广告”)。

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

  • 或者有没有更好、更有效的方式在不使用 Intent 的情况下传递这些数据?请告诉我!

我对问题的描述是否合理?但愿如此!否则,让我知道如何澄清它!如果您需要我粘贴任何代码,也请告诉我。

感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

    你可以使用 EventBus (greenrobot) nice library 来发送事件这个linke

    发送事件

    在添加库后,将以下方法添加到您的主要活动中:

    @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();将数据缓存在内存中,然后可以将粘性事件传递给订阅者或显式查询。

    更好的解决方案

    但我认为您可以在购买后在 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();
    

    【讨论】:

    • SharedPreferences 解决方案绝对是要走的路。
    • 感谢您的回答阿敏!我会尝试这种方法,然后再回复您是否有效!
    • SharedPreferences 方法工作得非常好,并且是一个非常简单的实现方法。非常感谢,阿明。解决了。​​
    猜你喜欢
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多