我正在为我的应用制作首选项屏幕。在首选项屏幕内,我有一个 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>
这是我在 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 的指点。