android - 没有 radio 的 ListPreference

标签 android android-preferences dialog-preference

<分区>

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

提前致谢!

enter image description here

我的 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>

这是我在 Activity 中加载的 fragment —

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

最佳答案

当在 XML 中指定为 Preference 而不是 ListPreference 或任何其他类型时,首选项就像任何按钮一样工作。所以,我只是在首选项中添加了一个监听器,并在监听器中打开了一个 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 的指点。

关于android - 没有 radio 的 ListPreference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21390154/

相关文章:

java.lang.ClassCastException 仅适用于 Android 2.3?

android - 使用图层列表创建可绘制的背景,图标被拉伸(stretch)

android - Facebook SDK "Package bolts does not exist error"安卓工作室

android - 为什么屏幕旋转时 fragment 不保留状态?

android - 从通知导航到父 Activity

Android:如何从首选项标题启动 Activity ?

在 fragment 中声明 findViewById 后出现 java.lang.NullpointerException

android - 如何更改 PreferenceScreen 中 PreferenceCategory 分隔符的颜色

Android:有没有办法从代码中显示 DialogPreference?

Android DialogPreference 布局 TextSize