3

在获取 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...
        }
    });
}

当我想在 Line 中获得参考时

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

Logcat 向我发送错误

requestFeature() must be called before adding content

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

4

3 回答 3

3

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

于 2014-07-01T00:49:55.233 回答
1

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

线性布局示例:

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 名称

于 2012-09-26T16:27:36.980 回答
1

是自定义 AlertDialogbox 的示例以及如何实现自定义 AlertDialog 视图 ,您可以看到如何将视图添加到 alertdialogbox。

于 2012-05-08T09:17:21.040 回答