FindViewByID在嵌套视图上返回null

时间:2020-06-30 22:10:54

标签: c# android xamarin xamarin.android

我有一个Xamarin.Android应用,该应用具有导航图,结构如下:

activity_main.xaml:

<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer_layout">

    <include
        layout="@layout/app_bar_main" />

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer"/>

</android.support.v4.widget.DrawerLayout>

nav_header_main.xaml:

<LinearLayout>
    <TextView
        android:id="@+id/Name"/>
</LinearLayout>

我正在尝试获取TextView @+id/Name,但是FindViewById<TextView>(Resource.Id.RunnerName)总是返回null

protected override void OnCreate(Bundle savedInstanceState)
{
    SetContentView(Resource.Layout.activity_main);
    DrawerLayout drawer = FindViewById<DrawerLayout>(Resource.Id.drawer_layout);
    //some stuff with `drawer`

    NavigationView navigationView = FindViewById<NavigationView>(Resource.Id.nav_view);
    navigationView.SetNavigationItemSelectedListener(this);
             
    // this always returns null:  
    TextView runnerName = FindViewById<TextView>(Resource.Id.RunnerName);
}

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

同意迈克,如果要在Textview中获得NavigationView,则应在View处获得navigationView.GetHeaderView(0);,然后可以使用以下代码来获取TextView

    NavigationView navigationView = FindViewById<NavigationView>(Resource.Id.nav_view);
    navigationView.SetNavigationItemSelectedListener(this);
    View MyView=navigationView.GetHeaderView(0);
    TextView textView1 = MyView.FindViewById<TextView>(Resource.Id.textView1);

此处正在运行屏幕截图。

enter image description here