0

Android アプリを作成しようとしていMultiSelectListPreferenceますが、設定メニューにオプションが必要です。PreferenceActivityこれを処理するために を作成し、preferences.xmlファイルも作成しましたが、プログラムでリスト要素を動的にロードできる必要があります。setEntriesこれを行うにはandメソッドを使用する必要があることはわかっていますsetEntryValuesが、これらのメソッドを使用すると、例外はスローされず、タイトルと要約はMultiSelectListPreferenc表示されますが、要素は表示されません。

入力に使用している配列が空ではないことを確認しentriesましentryValuesた。それらを印刷することと、配列の結果getEntries()getEntryValues()取得後の結果を印刷することによってset、これらは両方とも入力されるエントリリストを示しています。ただし、要素は表示されません。

私のpreferences.xmlコード:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <MultiSelectListPreference
        android:key="markedApps"
        android:title="Targeted Apps"
        android:summary="Select apps to conditionally disable" />
</PreferenceScreen>

私のAppSettings.javaコード:

public class AppSettings extends PreferenceActivity {
    public static MultiSelectListPreference blocked;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        blocked = new MultiSelectListPreference(this);
        getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefFrag()).commit();
    }
    public static class PrefFrag extends PreferenceFragment {
        @Override
        public void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
            MultiSelectListPreference blocked = (MultiSelectListPreference)findPreference("markedApps");
            if (blocked == null)
                Log.e("NullPointerException", "Blocked is null");
            AppSelector.populateAppList();
            CharSequence[] appNames = new CharSequence[AppSelector.Data.appNames.size()];
            CharSequence[] allApps = new CharSequence[AppSelector.Data.allApps.size()];
            int i = 0;
            for (String appName : AppSelector.Data.appNames)
                appNames[i++] = (CharSequence) appName;
            i = 0;
            for (String app : AppSelector.Data.allApps)
                allApps[i++] = (CharSequence) app;
            blocked.setEntries(appNames);
            blocked.setEntryValues(allApps);

        }
    }
}

ご協力いただきありがとうございます。

4

1 に答える 1