尝试动态禁用首选项时为空指针

时间:2012-05-02 00:01:35

标签: java android

我在以下代码中mPreference = (Preference)...上获得空指针异常(即启用调试器,mPreference显示为null; NB键为非null,我可以用文字替换它仍然给了我同样的例外):

public class SettingsManager extends PreferenceActivity {

    private Preference mPreference;
    private static boolean toggle;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Load the XML preferences file
        addPreferencesFromResource(R.xml.preferences);
    }

    public void setPrefEnabled(Context context, String key, String enabled) {
        if (enabled.contentEquals("true")) {
            toggle = true;
        } else {
            toggle = false;
        }
        mPreference = (Preference) getPreferenceScreen().findPreference(key);
        mPreference.setEnabled(toggle);
    }
}

在构造函数中实例化applySettings的类的settingsManager方法中,通过以下代码调用该类:

public class ConfigurationSetter {

    private static Context mContext;
    private static SettingsManager settingsManager;

    public ConfigurationSetter(Context context) {
        mContext = context;
        settingsManager = new SettingsManager();
    }

    private static void applySettings(Context context, String key,
            String value, String enabled) {
        settingsManager.setPrefEnabled(mContext, key, enabled);
    }
}

我一直在摸不着头脑,但可能有点太累了,无法自己解决这个问题。任何帮助表示赞赏。

与此问题相关,我asked a question here关于意图是否是此活动所需的实例化。

1 个答案:

答案 0 :(得分:0)

您的onCreate方法永远不会在此代码中调用(因此PreferenceScreen在调用addPreferencesFromResource时未填充onCreateActivityActivity生命周期的一部分,如果您使用Intent启动new,则会调用该生命周期。通常不会使用Context创建活动,因为在这种情况下,他们无法链接到正确的{{1}}并显示其他形式的未定义行为,例如您的行为。