Android:创建一个对话框

时间:2011-09-15 17:34:48

标签: android

我想我在这里非常密切地关注the Android tutorial。我有一个ListActivity,在某个时候会调用showDialog(DIALOG_EXPORT);。我的onCreateDialog()创建了一个对话框,设置了一个xml视图,然后尝试对该对话框的元素执行某些操作,但直接在findViewById()之后一切都是null。为什么呢?

这里是代码:

protected Dialog onCreateDialog(int id) {
    switch(id){
    case DIALOG_EXPORT:
        final Dialog dial = new Dialog(this);
        dial.setContentView(R.layout.export_dialog);
        dial.setTitle(R.string.dialog_export_title);
        EditText eFile = (EditText) findViewById(R.id.e_dialog_export);
        Button bOkay = (Button) findViewById(R.id.b_export_okay);
        Button bCancel = (Button) findViewById(R.id.b_export_cancel);
        <here all View elements are empty>
        ...
        return dial;

    ...
    }
}

3 个答案:

答案 0 :(得分:2)

您需要使用dial.findViewById()而非findViewById()

答案 1 :(得分:1)

您需要给视图充气。你需要做这样的事情:

@Override
protected Dialog onCreateDialog(int id) {

    LayoutInflater inflator = LayoutInflater.from(context);
    View view = inflator.inflate(R.layout.yourview, null);
    Button positive = (Button)view.findViewById(R.id.btn_positive);
    Button negative = (Button)view.findViewById(R.id.btn_negative);

    positive.setOnClickListener(new Button.OnClickListener(){
        public void onClick(View v) {
            removeDialog(0);
        }
    });

    negative.setOnClickListener(new Button.OnClickListener(){
        public void onClick(View v) {
            removeDialog(0);
        }
    });

    AlertDialog dialog = new AlertDialog.Builder(this).create();
    dialog.setView(view);

    return dialog;
}

答案 2 :(得分:0)

您忘记按照教程扩充对话框的布局。再看看它。它在那里。在不夸大布局的情况下,其他视图将返回null。