【问题标题】:How does FindViewById() work?FindViewById() 是如何工作的?
【发布时间】:2014-08-13 05:24:25
【问题描述】:

我是移动应用开发的新手。我正在使用 Xamarin 开发 Android 应用程序。在 OnCreate 方法的 hello world 应用程序中,我看到以下代码:

Button button = FindViewById<Button>(Resource.Id.MyButton);

所以我尝试以同样的方式创建自己的按钮。我在设计器中创建按钮,并在 OnCreate 方法中放入以下行:

Button myOwnBtn = FindViewById<Button>(Resource.Id.MyOwnBtn);

这给了我一个错误,即没有 MyOwnBtn。然后我在看 Id 类的代码,看到有这样一行:

public const int MyButton=2123344112;

如果我把这条线放在那里:

public const int MyOwnBtn=2123344113;

一切正常。但据我了解,它应该是自动生成的,否则为每个控件设置一个唯一编号会有点困难。

谁能告诉我我做错了什么? FindViewById() 是如何工作的?

【问题讨论】:

  • Resource.Id.MyOwnBtn 是创建新按钮时必须为按钮定义的 ID (MyOwnBtn)。
  • 如果找不到按钮,这就是为什么您没有使用声明了该按钮的布局设置内容视图的原因,因此它也无法显示、交互等。使用 SetContentView (资源.布局.我的布局);使用在 MyLayout XML 文件中创建的 MyOwnBtn。

标签: c# android xamarin xamarin-studio


【解决方案1】:

您必须将id MyOwnBtn 提供给您在设计器中创建的Button

findViewByIdView 类的一个方法,它会查找具有您在参数中提供的id 的子视图。

来自official documentation

查找具有给定 ID 的子视图。如果此视图具有给定的 id,则返回此视图。

【讨论】:

    【解决方案2】:

    MyButton id 不是 const 值,每次启动都会改变。

    【讨论】:

      【解决方案3】:

      Activity 或 ViewGroup 的 findViewById() 方法返回一个已经有 id 的视图。 findViewById() 方法应与 XML 布局结合使用,以提供对 XML 文件中定义的视图的引用。

      编辑:不完全确定我的回答是否与 Xamarin 相关。如果我误导了人们,我很抱歉,我指的是Java Android应用程序开发。

      【讨论】:

        【解决方案4】:

        当你在 .xml 文件中声明一个 button 时,你应该为它设置一个 id(通常使用 string.xml 文件)。之后,R.java 将自动更新并为您声明的 id 设置一个数字,您可以像您所做的那样通过该 id 访问您的按钮。

        【讨论】:

        • 我在属性选项卡中设置了一个 Id 属性。但是什么都没有更新。 @HaMi
        【解决方案5】:

        它将尝试从您膨胀的 XML 文件中找到它。因此,请确保您扩充了正确的 xml 文件。这段代码膨胀了 xml:

        SetContentView (Resource.Layout.MainLayout);
        

        即使您在 xml 文件中创建了正确的 id,如果您不先对其进行充气,系统也将无法找到该视图,因为它没有充气。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-12
          • 2021-03-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-24
          • 2016-11-13
          相关资源
          最近更新 更多