Xamarin访问其他视图的数据

时间:2018-01-08 11:57:22

标签: android xamarin view object-reference

我在访问其他视图中的数据时遇到了一个小问题,所以这里是代码。

按钮

Button button2 = FindViewById<Button>(Resource.Id.addExpereince);

按钮单击

            button2.Click += (sender, e) =>{

            EditText addCompany = FindViewById<EditText>(Resource.Id.addCompanyName);
            EditText addDate = FindViewById<EditText>(Resource.Id.addDate);
            EditText addPosition = FindViewById<EditText>(Resource.Id.addPosition);

            AddExpreince(1, addCompany.Text, addPosition.Text, addDate.Text);
            SetContentView(Resource.Layout.Main);

        };

我想学习,如何解决这个问题。按钮和EditText在其他视图上,我实际上不需要它们在主视图中工作,我只需要在MainActivity中初始化代码,以便它们可以在另一个视图中使用。

我收到的错误是为了更好的参考:

System.NullReferenceException: Object reference not set to an instance of an object.

1 个答案:

答案 0 :(得分:1)

  

System.NullReferenceException:未将对象引用设置为对象的实例。

根据文档

,您应首先使用SetContentView()
  

从布局资源设置活动内容。资源将被夸大,将所有顶级视图添加到活动中。

如果您没有首先向Activity添加布局,您的Activity基本上是一个空窗口。因此,当您使用FindViewById方法时,您将获得NullReferenceException例外。

解决方案:

像这样修改你的代码:

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);

    // Set our view from the "main" layout resource
    SetContentView(Resource.Layout.Main);

    // Get our button from the layout resource,
    // and attach an event to it
    Button button2 = FindViewById<Button>(Resource.Id.addExpereince);

    EditText addCompany = FindViewById<EditText>(Resource.Id.addCompanyName);
    EditText addDate = FindViewById<EditText>(Resource.Id.addDate);
    EditText addPosition = FindViewById<EditText>(Resource.Id.addPosition);

    button2.Click += (sender, e) => 
    {
        AddExpreince(1, addCompany.Text, addPosition.Text, addDate.Text);
    };
}