1

我正在为我的应用程序制作首选项屏幕。在首选项屏幕中,我有一个 ListPreference 用于“传播有关该应用程序的信息”。但是,我不想要那里的单选按钮。我希望整个对话框看起来像是用户可以做的事情的列表,并且用户可以从菜单中选择一个选项来执行。我该怎么做?我是 Android 新手,来自 iOS 背景。

提前致谢!

在此处输入图像描述

我的 pref_settings.xml 中有这个。

<PreferenceCategory
    android:key="pref_key_tell_friends"
    android:title="@string/pref_header_tell_friends" >
    <ListPreference
        android:entries="@array/spread_the_word"
        android:entryValues="@array/spread_the_word"
        android:key="pref_key_spread"
        android:title="@string/pref_title_spread" />
</PreferenceCategory>

这是我在我的活动中加载的片段 -

public static class SettingsFragment extends PreferenceFragment {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            // Load the preferences from an XML resource
            addPreferencesFromResource(R.xml.pref_settings);
        }
    }
4

1 回答 1

2

当在 XML中将首选项指定为 aPreference而不是 aListPreference或任何其他类型时,首选项的工作方式与任何按钮一样。所以,我只是在首选项中添加了一个侦听器,并AlertDialog在侦听器中打开了一个。这是代码 -

public static class SettingsFragment extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Load the preferences from an XML resource
        addPreferencesFromResource(R.xml.pref_settings);

        Preference myPref = (Preference) findPreference("pref_key_spread");
        myPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
                     public boolean onPreferenceClick(Preference preference) {
                         createListPreferenceDialog();
                         return false;

                     }
                 });
    }

    private void createListPreferenceDialog() {

        Dialog dialog;
        final String[] str = getResources().getStringArray(R.array.spread_the_word);
        AlertDialog.Builder b = new AlertDialog.Builder(getActivity());
        b.setTitle("Spread the Word");

        b.setItems(str, new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int position){

                Log.I(“Clicked the AlertDialog", + str[position]);
            }
        });

        dialog = b.create();
        dialog.show();

    }
}

这是更改后的 XML —

 <PreferenceCategory
        android:key="pref_key_tell_friends"
        android:title="@string/pref_header_tell_friends" >
        <Preference
            android:key="pref_key_spread"
            android:title="@string/pref_title_spread" />
    </PreferenceCategory>

感谢@njzk2 的指针。

于 2014-01-27T20:25:44.910 回答