繁体   English   中英

向后导航时传输数据

[英]Transfer Data on Navigating Back

我有4个活动。 从家庭活动中,您可以导航到其他3个。 该应用程序具有声音,并且每个视图上都有一个按钮以使声音静音。 当我从家庭活动中打开三个活动之一时,会通过intent.putExtra等传递“是否静音”值。 home-activity知道我在3个活动之一中是否进行了更改,并且在我使用“后退”按钮向后导航时也静音了并且还静音了吗? 这是覆盖后退按钮的正确方法吗?

谢谢您的帮助!

在回答您的问题时,您将希望开始每个活动以取得结果。 假设您有A-> B-> C-> D,每个都将开始显示结果。 然后,您可以在完成任何活动之前设置结果。 可以在这里找到示例。

但是,我认为我知道一种更简单的方法。 如果我错了,请纠正我,但是声音是否静音或不适用于整个应用程序? 如果是这样,只需在首选项中设置一个布尔值,然后在每个活动中检查它即可。 您可以这样做:

要将变量放在首选项中:

  Boolean shouldBeep = true;


  //inside the mute/unmute button listener(or whatever)

  SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
  SharedPreferences.Editor editor = settings.edit();
  editor.putBoolean("shouldBeep", shouldBeep);

  editor.commit();

然后检索该值:

   SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
   boolean shouldBeep = settings.getBoolean("shouldBeep", false);

最灵活的方式是子活动在进行更改时发送广播Intent,然后在所有活动中使用onReceive。

一种替代方法是使用SharedPreferences存储状态。

这听起来像是应用程序状态,我想说这属于活动之外,而不是从一个活动传递到另一个活动。 最简单的方法是拥有一个静态类来存储您的应用程序状态(或其中的一部分)。 有很多方法可以做到这一点,但这可能是最简单的。 如果使用静态类,则可以从任何所需的活动中设置并获取此信息。 这是一个例子

public class AudioPreferences {

private static boolean isMuted = false;

public static boolean isMuted() {
    return isMuted;
}

public static boolean setMuted(boolean muted) {
    isMuted = muted;
    return isMuted;
}

public static boolean toggleMuted() {
    isMuted = !isMuted;
    return isMuted;
}

}

其他选项是将其存储在SharedPreferences,自定义Application类或共享单例中,您可以从依赖关系容器中进行解析(注释,如果您想对其中任何一个进行澄清)。

您有很多选择。
1.您可以启动其他活动以获得结果,然后当您返回主应用程序时,检查活动返回了什么。
2.实际上在第二个活动中将android音量设置为静音

mAudioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC, true); 

然后检查主机中的音量。
3.发送消息并使用处理程序处理它,以防您拥有不同的线程。
希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM