Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin Android:typesafe FindViewById_C#_Android_Xamarin - Fatal编程技术网

C# Xamarin Android:typesafe FindViewById

C# Xamarin Android:typesafe FindViewById,c#,android,xamarin,C#,Android,Xamarin,需要调用FindViewById是在活动中获取视图的一种非常糟糕的方法。如果布局中不存在视图,则可能会在运行时导致异常。 是否有一个布局生成器来生成包含所有已知视图作为成员变量的活动(如在Windows.Forms或更好的WPF中),以便使活动类型安全 缺点 这是不安全的 实施起来很费时 不易出错,在运行时导致异常 编写大量样板代码 优势 当存在大量不需要成员变量的未使用视图时,可能会降低内存影响 更好的负载性能 因此,与此相反: 编辑文本(EditText); // _editTe

需要调用
FindViewById
是在
活动中获取视图的一种非常糟糕的方法。如果布局中不存在视图,则可能会在运行时导致异常。
是否有一个布局生成器来生成包含所有已知视图作为成员变量的
活动
(如在Windows.Forms或更好的WPF中),以便使活动类型安全

缺点

  • 这是不安全的
  • 实施起来很费时
  • 不易出错,在运行时导致异常
  • 编写大量样板代码
优势

  • 当存在大量不需要成员变量的未使用视图时,可能会降低内存影响

  • 更好的负载性能

因此,与此相反:

编辑文本(EditText);

//

_editText=FindViewById(Resource.Id.editText1)

_editText.Text=“你好,世界!”

我的结论是:

_editText.Text=“你好,世界!”


首选的方法是利用。但这对Xamarin不可用。

这是一个真正的开放式问题。有许多方法可以实现类型安全并获取视图。最好和最可接受的方法是在运行时使用膨胀,将您想要的类型放入视图中:

自定义的
视图组
可以充气到
容器中
。这是 以编程方式完成,并且您拥有“代码定义类型”,而不是 这些类型应该存在于XML文档中,或者以其他方式存在 去拿。看看 : 对于实现细节(在Xamarin中也一样,有一些大写字母,等等)

你不应该因为调用函数等的方式而做出任何有问题的东西。我想说的是,看看你的编程方式,让它更符合谷歌(Android)和微软(Xamarin)的要求,这样你就不会遇到这么多问题。(我知道这没有什么帮助,但这个问题是非常一般的,所以只要了解框架,就可以找到好的解决方案。)


另一个很好的方法是使用Android和Xamarin中提供的数据绑定Api:

>使其更符合Google(Android)和Microsoft(Xamarin)的要求,这样您就不会遇到像这样的问题。他们为Xamarin和Android发布了数据绑定api。如果你真的想消磨时间。查一查。它类似于HTML中的数据绑定,但适用于XML。简单。同意,数据绑定是解决问题的方法。Xamarin不支持通过gradle进行androids数据绑定。人们必须依赖第三方应用程序,或者以旧的方式实现它。Xamarin=(考虑一下,这是一个很好的绑定库,可以解决其中的一些问题。MFractor还支持使用MFractor.Annotations库验证缺少的ID。请参阅