自定义对话框元素在活动中为空

时间:2018-06-17 06:36:51

标签: android xamarin

我已经按照教程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);

1 个答案:

答案 0 :(得分:1)

由于您要查找的那些视图属于dialog,因此您应该在FindViewById对象上调用dialog。像这样:

// ...
TextView textView = dialog.FindViewById<TextView>(Resource.Id.CustomDlgTextView);
// ...
Button btn = dialog.FindViewById<Button>(Resource.Id.CustomDlgButton);

当您在活动中调用FindViewById时,它会尝试在您的活动中找到该视图,并且由于这两个视图不属于活动本身,因此无法找到它们。 希望它有所帮助。