我希望在我的首选项更新后从我的主活动类中调用一个函数,但我不能使用onResume()
因为我有其他类会触发onResume
(我相信)。
来自AndroidGPSTrackingActivity.java
的片段:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.settings:
startActivity(new Intent(this, SettingsActivity.class));
break;
}
return false;
}
SettingsActivity.java
:
package com.example.gpstracking;
import android.os.Bundle;
import android.preference.PreferenceActivity;
public class SettingsActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
在我的偏好关闭之后,我想从我的主活动中调用一个函数,但它必须来自我的主要活动,因为我需要从我的主活动发送一个上下文。我已经尝试过这么多,但似乎无法得到它。
答案 0 :(得分:0)
onResume()
到达前台时会触发 Activity
。除了离开/返回活动之外,你永远不应该“触发”onResume()
(如果你曾经直接打电话给onResume()
,那你做错了)。
假设您在返回活动时需要检查更新的值,那么是,onResume()
是您应该这样做的地方。如果用户在查看SettingsActivity后返回MainActivity,则会调用onResume()
,您可以在那里检查更新的首选项值。
编辑:所以我认为你最好在onResume()
中检查偏好值,而不是全局缓存它们。查找它们并不昂贵。此外,对于即时通知,您可以为首选项更改注册一个侦听器,如下所示:
public class MainActivity extends Activity
implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
registerPreferenceListener();
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterPreferenceListener();
}
private void registerPreferenceListener() {
PreferenceManager.getDefaultSharedPreferences(this)
.registerOnSharedPreferenceChangeListener(this);
}
private void unregisterPreferenceListener() {
PreferenceManager.getDefaultSharedPreferences(this)
.unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(
SharedPreferences sharedPreferences, String key) {
if ("the_key_i'm_interested_in".equals(key)) {
// Update stuff
}
}
}