我在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()之前我需要这个引用...
答案 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名称