在导航回传数据

时间:2012-11-19 20:28:57

标签: java android lifecycle back-button

我有4个活动。在家庭活动中,您可以导航到其他3个人。应用程序有声音,每个视图上都有一个按钮来静音。当我从家庭活动中打开3个活动中的一个时,“静音或不静音”值由intent.putExtra等转移...当我在家庭活动中静音时,它工作正常,但怎么能家庭活动知道我在3个活动中的一个中做了改变,然后静音,当我用后退按钮导航时声音静音?这是覆盖后退按钮的正确方法吗?

感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

在回答您的问题时,您需要为结果启动每项活动。说你有 A - > B - > C - >每个都将开始结果。然后,您可以在完成任何活动之前设置结果。可以找到here的例子。

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

将变量放在prefs中:

  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);

答案 1 :(得分:1)

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

另一种方法是使用SharedPreferences来存储状态。

答案 2 :(得分:1)

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

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类或可以从依赖容器中解析的共享单例中(如果您想澄清其中任何一个,请发表评论)。

答案 3 :(得分:0)

你有很多选择 1.你可以start the other activities for result当你回到你的主要应用程序时,检查返回的活动 2.实际上将android音量设置为静音,如第二个活动

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

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