Java 安卓-当偏好改变时,在活动中做些事情

Java 安卓-当偏好改变时,在活动中做些事情,java,android,android-activity,callback,sharedpreferences,Java,Android,Android Activity,Callback,Sharedpreferences,我有两个类,CustomerPreferences它扩展了PreferenceActivity在共享PreferenceChangeListener上实现的和CustomerActivity它扩展了Activity。在CustomerActivity中,我计算了一些值。在CustomerPreferences中,我要监视一个特定的ListPreference。当用户输入CustomerPreferences(通过CustomerActivity上的菜单选项完成)并更改ListPreference

我有两个类,
CustomerPreferences
它扩展了PreferenceActivity在共享PreferenceChangeListener上实现的
CustomerActivity
它扩展了Activity
。在
CustomerActivity
中,我计算了一些值。在
CustomerPreferences
中,我要监视一个特定的
ListPreference
。当用户输入
CustomerPreferences
(通过
CustomerActivity
上的菜单选项完成)并更改
ListPreference
,然后点击后退按钮并返回到
CustomerActivity
,我想根据新的首选项设置重新计算我的值。如果用户进入
CustomerPreferences
,但没有更改
ListPreference
的值,我不想在返回到
CustomerActivity
时重新计算任何内容

我该怎么做


我想我需要在
CustomerPreferences.onSharedPreferenceChanged
以及
CustomerPreferences.onBackPressed
,然后可能需要在
CustomerActivity
中处理一些事情。您可以处理CustomerActivity的onResume()方法中的更改。因此,在用户按下back键后,在onResume()中,检查您的首选项并重新计算您的值,并根据计算出的值更改GUI表示形式

当然,有时这是不必要的,因为用户可能没有更改任何内容。只要你的计算不是太重,这就不应该引起关注

您可以做的另一件事是在共享首选项(如preferencesChanged)中设置一个布尔值,它将在CustomerPreferences.onSharedPreferenceChanged中设置为true。然后检查onResume()中的首选项更改。如果为真,请重新计算。否则什么也不做


另一个选项是使用startActivityForResult()启动结果的首选项活动。然后在CustomerActivity的onActivityResult()中重新计算。结果值将在CustomerPreferences中设置。onSharedPreferenceChanged

onResume
中执行此操作效果良好:谢谢,我是Android开发新手,所以我不知道该找什么。我就知道会有这样的事!在阅读本文之前,我使用了
onResume()
,但我认为
startActivityForResult()
更好,因为调用
onResume()
可能有许多其他原因,而不是退出首选项。