如何在AlertDialog中从XML布局获取TextView的引用?

时间:2012-05-08 08:57:27

标签: android alertdialog

我在TextView,SeekBar和其他小部件上获得引用时遇到了一个奇怪的问题。我的AlertDialog看起来像这样:

public class LineDialog extends AlertDialog {
private static SeekBar seekBar1, seekBar2, seekBar3;
private static TextView textView1, textview2, textView3;

protected LineDialog(final Context context, final DrawView drawView) {
    super(context);

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View dialogLayout = inflater.inflate(R.layout.line_dialog, null);

    setView(dialogLayout);
    setTitle("Line properties");
    textView1 = (TextView) findViewById(R.id.textView1); // TODO Code crash here :(
    setButton("Ok", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            seekBar1 = (SeekBar) findViewById(R.id.seek1);
            // some other code...
        }
    });
}

当我想在线路中获取参考

textView1 = (TextView) findViewById(R.id.textView1);

Logcat发给我一个错误

requestFeature() must be called before adding content

但是当我在LineDiealog(AlertDialog)中的onClick()方法中获得引用时,一切正常。不幸的是,这太晚了,因为在调用LineDialog.show()之前我需要这个引用...

3 个答案:

答案 0 :(得分:3)

你的原始代码中几乎有它。您保存了由LayoutInflater返回的视图,因此这是您在调用findViewById()时应使用的视图,因此它必须是dialogLayout.findViewById(...)。我自己也有同样的问题,现在就像魅力一样。

答案 1 :(得分:1)

Here是自定义AlertDialogbox和How to implement a custom AlertDialog View的示例 您可以看到如何将视图添加到alertdialogbox。

答案 2 :(得分:1)

您必须通过LinearLayout或xml文件中的android:id引用textView。

LinearLayout示例:

LinearLayout mainLinear = new LinearLayout(this);
mainLinear.addView(textBox);

在框中添加文字:

textBox.addText("This is the text to add to the text box");

xml引用(您必须首先在xml中创建文本框!!!!):

TextView text1=(TextView) findViewById(R.id.NAME);
text1.setText("Hello please pick an option below");

NAME部分必须替换为.xml文件中的android:id名称