0

Preferences を 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();。どうすれば解決できますか?

4

2 に答える 2

1

あなたはあなたの設定をコミットしていないので、あなたの共有設定にエントリはありません..だから、NULLポインターexcを与えるのです.

これを行う

 mFilterShow.commit();
于 2013-02-06T10:25:21.573 に答える
0

質問に対する正確な解決策が見つかりませんでした。PreferenceScreenに動的に追加したPreferencesを削除したり、見つけたりすることができないのは非常に奇妙です。どちらの場合も、NullPointerExceptionが発生します。

しかし、私は自分の問題を解決した解決策を見つけました。必要なすべての要素を使用して、2つの個別のxml設定を作成しました。対応するイベントでそれらを追加および削除します。

于 2013-02-07T11:09:29.140 に答える