0

mPreference = (Preference)...在下面的代码中得到一个空指针异常(即调试器打开,mPreference显示空;NB 键是非空的,我可以用文字替换它仍然给我同样的异常):

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);
    }
}

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

与这个问题相关,我在这里问了一个关于意图是否是此活动所需的实例化器的问题。

4

1 回答 1

0

您的onCreate方法永远不会在此代码中调用(因此PreferenceScreen在调用期间未按addPreferencesFromResource预期填充)。onCreateActivity生命周期的一部分,如果您Activity使用Intent. 通常不使用创建活动new,因为在这种情况下,它们不会链接到正确的Context并显示其他形式的未定义行为,例如您的。

于 2012-12-22T17:10:05.773 回答