首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在onPrepareDialog中设置setSingleChoiceItems的内容?

如何在onPrepareDialog中设置setSingleChoiceItems的内容?
EN

Stack Overflow用户
提问于 2011-01-27 08:13:33
回答 2查看 17.9K关注 0票数 7

伙计们,在onCreateDialog里我是这样的:

代码语言:javascript
运行
复制
case DIALOG_REVIEW: {
    if (bundle.containsKey("POSITION")) {
    final int position = bundle.getInt("POSITION");
    ArrayList<String> alterNumbers = numbers.get(position);
    final String[] phoneNums = new String[alterNumbers.size()];
    for (int i = 0; i < alterNumbers.size(); i++) {
        phoneNums[i] = alterNumbers.get(i);
    }
    AlertDialog.Builder dialog = new AlertDialog.Builder(this);
    dialog.setTitle(names.get(position) + "'s number(s)");
    dialog.setSingleChoiceItems(phoneNums, 0,
        new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog,
                int which) {
            // get selected item and close the dialog
            String selectedNumber = phoneNums[which];
            updateUserSelectedNumber(position , selectedNumber);
            }
        });
    return dialog.create();
    }

这是有效的和伟大的。

但要注意行

代码语言:javascript
运行
复制
dialog.setSingleChoiceItems(phoneNums, 0,
        new DialogInterface.OnClickListener() {

每次弹出对话框时,phoneNums都会发生变化。我已经覆盖了onPrepareDialog方法,但是我不知道如何给它赋新值。而且那里也没有setSingleChoiceItems。

下面是我的onPrepareDialog方法

代码语言:javascript
运行
复制
case DIALOG_REVIEW: {
    final int position = bundle.getInt("POSITION");
    ArrayList<String> alterNumbers = numbers.get(position);
    final String[] phoneNums = new String[alterNumbers.size()];
    for (int i = 0; i < alterNumbers.size(); i++) {
    phoneNums[i] = alterNumbers.get(i);
    }
    AlertDialog alertDialog = (AlertDialog) dialog;
    alertDialog.setTitle(names.get(position) + "'s number(s)");
    ???
    break;
}

解决方案是什么?提前谢谢各位。

EN

回答 2

Stack Overflow用户

发布于 2011-03-30 19:31:21

您需要使用AlertDialog类中的getListView方法。然后对返回的对象使用setItemChecked方法。示例:

alertDialog.getListView().setItemChecked(1, true);

票数 10
EN

Stack Overflow用户

发布于 2011-09-29 01:52:27

我刚刚遇到了同样的问题:

两种解决方案:

1/快速和肮脏

删除该对话框每次完成后,将不会调用=> onPrepareDialog,因此您不会遇到数据更新问题:

代码语言:javascript
运行
复制
protected Dialog onCreateDialog(int id) {
    ...
    case DIALOG_REVIEW: {
        AlertDialog.Builder dialog = new AlertDialog.Builder(this);
        dialog.setTitle(names.get(position) + "'s number(s)");
        dialog.setSingleChoiceItems(phoneNums, 0,new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog,int which) {
            // get selected item and close the dialog
            String selectedNumber = phoneNums[which];
            updateUserSelectedNumber(position , selectedNumber);
            removeDialog(DIALOG_REVIEW);
        }
    });
    return dialog.create();
}

如果您愿意,您可以放置一个onDismissListener,然后在对话框中执行removeDialog。

2/相当漂亮的那个

在onPrepareDialog方法中,只需将对话框使用的旧ArrayAdapter替换为新的:

代码语言:javascript
运行
复制
@Override
protected void onPrepareDialog(int id, Dialog dialog) {
    switch (id) {
        case DIALOG_REVIEW:
            ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.select_dialog_singlechoice, android.R.id.text1, phoneNums);
            AlertDialog ad = (AlertDialog) dialog;
            ad.getListView().setAdapter(adapter);
        break;
        default:
            super.onPrepareDialog(id, dialog);
    }
}

我使用与android相同的方法( froyo源代码的AlertController.java L.854)第一次填充对话框。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4811688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档