我已经按照教程https://www.mkyong.com/android/android-custom-dialog-example/
进行了操作但是我使用的是xamarin android和代码片段在.net中。
主要布局 - dialog_main和自定义对话框布局 - CustomDialog。 MainActivity代码片段如下。
base.OnCreate(bundle);
SetContentView(Resource.Layout.dialog_main);
Button button = FindViewById<Button>(Resource.Id.ShowDialog);
button.Click += delegate
{
Dialog dialog = new Dialog(this);
dialog.SetContentView(Resource.Layout.CustomDialog);
dialog.SetTitle("this is my custom dialog");
dialog.SetCancelable(true);
TextView textView = FindViewById<TextView>(Resource.Id.CustomDlgTextView);
textView.SetText(Resource.String.dialogtext);
Button btn = FindViewById<Button>(Resource.Id.CustomDlgButton);
btn.Click += delegate
{
dialog.Dismiss();
};
dialog.Show();
};
我没有得到TextView和Button元素,它会抛出null异常。但是,在编译应用程序成功构建的同时,我能够看到Resource.Id具有元素。
TextView textView = FindViewById<TextView>(Resource.Id.CustomDlgTextView);
答案 0 :(得分:1)
由于您要查找的那些视图属于dialog
,因此您应该在FindViewById
对象上调用dialog
。像这样:
// ...
TextView textView = dialog.FindViewById<TextView>(Resource.Id.CustomDlgTextView);
// ...
Button btn = dialog.FindViewById<Button>(Resource.Id.CustomDlgButton);
当您在活动中调用FindViewById
时,它会尝试在您的活动中找到该视图,并且由于这两个视图不属于活动本身,因此无法找到它们。
希望它有所帮助。