获取LinearLayout由Id使用Xamarin返回null

Ole*_*ena -1 android nullreferenceexception xamarin.android android-linearlayout xamarin

我为什么要这样mainLayout==null

protected override void OnCreate (Bundle bundle)
{
    base.OnCreate (bundle);
    SetContentView (Resource.Layout.Main);
    LinearLayout mainLayout = FindViewById<LinearLayout> (Resource.Layout.Main);//return null
    mainLayout.Touch+=(s,e)=>
    {
         //something
    }
}
Run Code Online (Sandbox Code Playgroud)

如何获取MainLayout或如何添加事件处理程序Touch?

Resource.designer.cs:

public partial class Layout
{
    public const int Main = 2130903041;
    //other
}
Run Code Online (Sandbox Code Playgroud)

Vik*_*ram 5

LinearLayout mainLayout = FindViewById<LinearLayout> 
                                   (Resource.Layout.Main);//return null
Run Code Online (Sandbox Code Playgroud)

您正在使用布局文件作为参数: Resource.Layout.Main

你应该使用的是id你在里面分配给你的LinearLayout Resource.Layout.Main.

尝试:

LinearLayout mainLayout = FindViewById<LinearLayout> 
                                   (Resource.Id.linear_layout_id);
Run Code Online (Sandbox Code Playgroud)

  • @Olena No.必须将id分配给xml文件中的LinearLayout.这就是它的发现方式.将"android:id ="@ + id/mylinearlayout"添加到LinearLayout并使用`LinearLayout mainLayout = FindViewById <LinearLayout>(Resource.Id.mylinearlayout);` (3认同)

小智 5

在XML上设置一个ID(android:id ="@ + id/mainLayoutID"),其中包含名为"mainLayout"的LinearLayout.

然后:


@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Your layout reference
    final LinearLayout mainLayout = (LinearLayout) findViewById(R.id.mainLayoutID);

}
Run Code Online (Sandbox Code Playgroud)