我有一个由两个活动组成的应用程序:“主要”活动(M)和“设置”活动(S)。 S只能从M启动.S的目的是修改影响M的设置.S有一个“完成”按钮,完成活动并返回M(通过M的onActivityResult
方法,{{ 1}}包含要应用的M的新设置。
我的问题是:如果我使用硬件“后退”按钮(而不是S的“完成”按钮)从S返回到M,系统会将M带到顶部,而不知道修改后的设置。可以修改此行为吗?理想情况下,当S位于顶部时,我想改变硬件“后退”按钮的行为,这样它就会导致S完成(这样M就会得到新的设置)。
如果那是不可能的,更一般地说:你会怎样按下“后退”按钮进行设置?
答案 0 :(得分:4)
您可以简单地覆盖onBackPressed()
@Override
public void onBackPressed()
{
// check if settings have been changed
super.onBackPressed();
}
由于这是一个“结束操作”,因此在完成其他工作后执行super
调用。
关注blackbelt答案(现已删除的评论)留下的评论,如果您还没有,可能会考虑用户是否确定他们想要退出而不保存,以防他们进入设置并决定不要改变任何东西。如果因为他们决定不保存更改而按下后退按钮怎么办?您可能已经有了类似取消按钮的内容。
答案 1 :(得分:2)
您必须覆盖onBackPressed
中的Activity
,并通过done
按钮管理相同的逻辑
答案 2 :(得分:2)
您还可以使用包含设置的静态字段向您的包中引入新的java类。
当用户更改设置&请尽快在活动的OnResume()
方法中或稍后根据需要从中阅读。
答案 3 :(得分:1)
您可以通过覆盖onbackpressed方法
来实现您想要的效果@Override
public void onBackPressed() {
Intent intent = new Intent();
//get your settings from your views
intent.putExtra("setting1","on");
intent.putExtra("setting2","off");
setResult(RESULT_OK);
finish();
}
答案 4 :(得分:1)
上面的答案会做你想要的,但是:
您是否考虑过使用内置的Android SharedPreferences?这样,对设置(在S中制作)的更改将存储到设备中,然后您可以告诉活动M查看设置并在onResume方法中进行适当更新。此外,设置将永久保存,无论S发生什么都无关紧要。