NullPointerException,而Preferences删除动态添加的

时间:2013-02-06 10:20:28

标签: android dynamic-data android-preferences preferenceactivity preference

我需要动态地向我的PreferenceActivity添加首选项,我这样做:

mFilterShow = (PreferenceScreen)getPreferenceScreen().findPreference("orderScreen");


public void assignmentFieldsAdd()
{
    CheckBoxPreference cb1 = new CheckBoxPreference(this);
    cb1.setTitle("Detailed explanation " + "\r\n" +"required");
    cb1.setKey("assign1");
    CheckBoxPreference cb2 = new CheckBoxPreference(this);
    cb2.setTitle("Shoot exclusive video");
    cb1.setKey("assign2");
    CheckBoxPreference cb3 = new CheckBoxPreference(this);
    cb1.setKey("assign3");
    cb3.setTitle("Shoot common video");
     mFilterShow.addPreference(cb1);
     mFilterShow.addPreference(cb2);
     mFilterShow.addPreference(cb3); 
}

然后,我需要在某些事件中删除它。当我打电话

  public void assignmentFieldsDelete()
    {

        mFilterShow.removePreference(mFilterShow.findPreference("assign1"));
        mFilterShow.removePreference(mFilterShow.findPreference("assign2"));
        mFilterShow.removePreference(mFilterShow.findPreference("assign3"));

    }

我得到了

 02-05 18:14:50.159: E/AndroidRuntime(15259): FATAL EXCEPTION: main
 java.lang.NullPointerException
    at com.assignmentexpert.AssignmentPref.assignmentFieldsDelete(AssignmentPref.java:175)
    at com.assignmentexpert.AssignmentPref$2.onPreferenceChange(AssignmentPref.java:97)
    at android.preference.Preference.callChangeListener(Preference.java:756)
    at android.preference.ListPreference.onDialogClosed(ListPreference.java:219)
    at android.preference.DialogPreference.onDismiss(DialogPreference.java:389)
    at android.app.Dialog$ListenersHandler.handleMessage(Dialog.java:1047)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:3687)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
    at dalvik.system.NativeStart.main(Native Method)

因此无法找到我动态创建的首选项。当我只想打电话getPreferenceScreen().findPreference("assign1").getTitle();时,我会怎样才能解决这个问题?

2 个答案:

答案 0 :(得分:1)

朋友你没有提交你的偏好所以你的共享偏好中没有条目.....这就是为什么它给NUll指针激活。

这样做

 mFilterShow.commit();

答案 1 :(得分:0)

我没有找到准确的问题解决方案。我无法删除甚至找到我动态添加到PreferenceScreen的偏好设置,这很奇怪。在这两种情况下,我都有NullPointerException。

但我找到了解决我问题的解决方案。我用所有必需元素创建了2个单独的xml首选项。我在相应的事件中添加和删除它们。