首选项更新Android后,从活动类调用函数

时间:2014-02-11 00:05:47

标签: java android

我希望在我的首选项更新后从我的主活动类中调用一个函数,但我不能使用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);
    }
}

在我的偏好关闭之后,我想从我的主活动中调用一个函数,但它必须来自我的主要活动,因为我需要从我的主活动发送一个上下文。我已经尝试过这么多,但似乎无法得到它。

1 个答案:

答案 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
        }
    }
}