我需要ListPreference中的动态条目,所以我不能使用传统的
XML设置方式,其中有大量的在线资料.到目前为止,我有以下设置,你可以看到如下.问题是,当我运行这个时,我看到带有标题和消息的对话框但是没有条目显示,即使我知道条目和值不为空(我知道我的条目和值是相同的但如果我没有,我会得到错误提供的条目)
my.preference.DynamicPreference android:title="@string/date_format" android:dialogMessage="@string/profile_info_date_format" android:entryValues="@array/date_format_values" android:entries="@array/date_format_values"
public class DynamicPreference extends ListPreference { private int index; public DynamicPreference(Context context,AttributeSet attrs) { super(context,attrs); } public DynamicPreference(Context context) { super(context); } @Override protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { builder.setTitle(getTitle()); builder.setMessage(getDialogMessage()); builder.setSingleChoiceItems(entries(),-1,new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface,int i) { } }); super.onPrepareDialogBuilder(builder); } @Override public void setEntries(CharSequence[] sequence) { CharSequence[] entries = listObjects().toArray(new CharSequence[listObjects().size()]); super.setEntries(entries); } @Override public void setEntryValues(CharSequence[] sequence) { CharSequence[] values = getContext().getResources().getStringArray(R.string.date_format); super.setEntryValues(values); } }
解决方法
android:dialogMessage是一个很好的起点,谢谢@MH.发现它.贝娄是我结束的简单设置,我希望有人可能会发现它有用
<my.preference.DynamicPreference android:title="@string/local_time" android:key="profile_info_local_time" />
public class DynamicPreference extends ListPreference { public DynamicPreference(Context context,attrs); } public DynamicPreference(Context context) { super(context); } @Override protected View onCreateDialogView() { ListView view = new ListView(getContext()); view.setAdapter(adapter()); setEntries(entries()); setEntryValues(entryValues()); setValueIndex(initializeIndex()); return view; } private ListAdapter adapter() { return new ArrayAdapter(getContext(),android.R.layout.select_dialog_singlechoice); } private CharSequence[] entries() { //action to provide entry data in char sequence array for list } private CharSequence[] entryValues() { //action to provide value data for list } }