【问题标题】:Send data from onSharedPreferenceChanged() to another UI Fragment将数据从 onSharedPreferenceChanged() 发送到另一个 UI 片段
【发布时间】:2017-03-31 09:19:41
【问题描述】:

我在应用中播放循环背景音乐,我使用 SoundPool。 我还使用 PreferenceFragment(当然还有 sharedPreferences)和 UI 复选框“Background Music On/Off”。

一旦用户从偏好片段中移除/设置 UI 复选框,背景音乐应该立即停止/开始播放。

问题

如何立即从 onSharedPreferenceChanged() 将 PreferenceFragment 中的数据发送到另一个 UI 片段(见图)? 谢谢。

UPD 问题解决了。

制作一个对象(直接控制声音)作为单例。 然后从 onSharedPreferenceChanged 直接调用 SoundPool_pause_method。

也许这在架构方面是不正确的。

我(很快)阅读了很多信息: 在服务中使用 MediaPlayer, AsyncTask(我已经知道不合适), 执行人, 线程池执行器, 未来任务, 处理线程。

【问题讨论】:

  • 使用EventBus。它是一个库,用于在应用程序中从任何组件到组件触发事件。
  • 或发送内部广播(如果您正在寻找快速解决方案)
  • 如果两个片段都附加到 Mainactivity 并且应该对同一个 sharedPreferencesChange 做出反应,为什么不在知道两个片段的活动中实现监听器呢。

标签: android android-fragments singleton android-preferences android-sharedpreferences


【解决方案1】:

如果您正在寻找快速解决方案,那么您可以尝试触发自定义广播。

您可以查看教程here。您的MainUIFragment 将是BroadcastListener,它将监听特定的自定义事件广播,该广播可以由PreferenceFragment 在预期时触发。

在清单中声明

 <receiver android:name="MyReceiver">
         <intent-filter>
            <action android:name="some.identifier.string">
            </action>
         </intent-filter>
  </receiver>

自定义接收器来处理事件广播

public class MyReceiver extends BroadcastReceiver{
   @Override
   public void onReceive(Context context, Intent intent) {
      Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
   }
}

来自

的触发事件
public void broadcastIntent(View view){
      Intent intent = new Intent();
      intent.setAction("some.string.identifier"); sendBroadcast(intent);
   }

【讨论】:

    猜你喜欢
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多