具有动态条目的自定义ListPreference

pet*_*udo 7 android

我需要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"

Run Code Online (Sandbox Code Playgroud)
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);
    }
}
Run Code Online (Sandbox Code Playgroud)

pet*_*udo 14

android:dialogMessage是一个很好的起点,谢谢@MH.发现它.贝娄是我结束的简单设置,我希望有人可能会发现它有用

<my.preference.DynamicPreference
        android:title="@string/local_time"
        android:key="profile_info_local_time"
        />
Run Code Online (Sandbox Code Playgroud)

public class DynamicPreference extends ListPreference {


    public DynamicPreference(Context context, AttributeSet attrs) {
        super(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
    }
}
Run Code Online (Sandbox Code Playgroud)