膨胀文本视图时出现空引用错误

本文关键字:引用 错误 文本 视图 膨胀 | 更新日期: 2023-09-27 18:29:03

我正在Xamarin Android应用程序中添加一个文本视图作为列表视图的标题。按照ericosg对这个SO问题的回答中的说明,我将文本视图放在一个单独的axml文件中,然后尝试将其作为标题添加到我的列表视图中。

运行应用程序会在活动试图膨胀文本视图的行出现以下错误:

[MonoDroid] UNHANDLED EXCEPTION:
[MonoDroid] Android.Content.Res.Resources+NotFoundException: Exception of type 'Android.Content.Res.Resources+NotFoundException' was thrown.
.
.
.
[MonoDroid]   --- End of managed exception stack trace ---
[MonoDroid] android.content.res.Resources$NotFoundException: Resource ID #0x7f050006 type #0x12 is not valid
[MonoDroid]     at android.content.res.Resources.loadXmlResourceParser(Resources.java:2250)  
etc.

这是我的代码:

在Activity.cs文件中:

myListView = FindViewById<ListView>(MyApp.Resource.Id.MyList);
        Android.Views.View myHeader = 
            this.LayoutInflater.Inflate(MyApp.Resource.Id.QuestionText, myListView);
        myListView.AddHeaderView(myHeader);

ListView定义:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ListView
        android:id="@+id/MyList"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" />
    </RelativeLayout>

标题定义:

<?xml version="1.0" encoding="utf-8"?>
        <TextView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/QuestionText"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:drawableTop="@+id/MyImage" />

膨胀文本视图时出现空引用错误

几件事:

您正试图膨胀ID资源而不是布局:

 Android.Views.View myHeader = this.LayoutInflater.Inflate(MyApp.Resource.Id.QuestionText, myListView);

LayoutInflaterInflate调用只接受Resource.Layout元素。更改为:

Android.Views.View myHeader = this.LayoutInflater.Inflate(Resource.Layout.Header, myListView);

其次,在Header.xml布局文件中,TextView android:drawableTop不接受id引用,因此当LayoutInflator尝试构建布局时,它将抛出一个InflateException

来自文档:

安卓:drawableTop

可绘制在文本上方的绘图。

可以是对其他资源的引用,格式为"@[+][package:]type:name",也可以是对主题属性的引用,形式为"?[package:][type:]name"。

可以是颜色值,格式为"#rgb"、"#argb"、"#rrggbb"或"#aarggbb"。

将其更改为对有效颜色或可绘制(@drawable/MyImage)或内联颜色声明(#fff)的引用。

最后,如果不使用适配器,就无法将子视图或头视图添加到ListView中:

  • https://stackoverflow.com/a/7978427/1099111
  • https://stackoverflow.com/a/7978427/1099111

考虑重读ListViews和Adapters的Xamarin文档,以更好地理解主题。