【问题标题】:Android TextView casting error: android.widget.LinearLayout cannot be cast to android.widget.TextViewAndroid TextView 投射错误:android.widget.LinearLayout 无法投射到 android.widget.TextView
【发布时间】:2011-09-23 22:16:24
【问题描述】:

我在布局文件中有以下文本视图,这是布局文件的全部内容:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/seasonTitle"
    android:padding="3dip"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="#FFFFFFFF"
    android:textSize="14sp"
    android:textStyle="bold"
    android:maxHeight="26sp"
    android:background="#FFCC3333"
     />

它已经在我的应用程序中使用了一年左右,没有任何问题。突然间我得到了错误:android.widget.LinearLayout cannot be cast to android.widget.TextView

我想不通。

布局文件中包含如下代码:

TextView seasonTv = (TextView)mInflater.inflate(R.layout.section_title, null);

对为什么会发生这种情况有任何见解吗?

谢谢!

【问题讨论】:

    标签: android textview android-inflate


    【解决方案1】:

    您似乎将 null 作为视图组的根元素传入。当您实际上根本没有视图组时,我会假设充气器将您的视图组默认为线性布局。我会尝试修改您的 inflate 调用,因为您的布局文件看起来不错。

    来源:http://developer.android.com/reference/android/view/LayoutInflater.html

    【讨论】:

    • 您的回答解决了眼前的问题,谢谢!,但这让我很困惑。请帮助我更好地理解这一点。这段代码已经工作了一年的大部分时间。上面 10 行的相同基本代码行运行良好。为什么行为会发生这样的变化?
    • 只是猜测,但其他布局是视图组的一种形式,还是文本视图?我会说,如果它是一个视图组,那么线性布局默认值不会造成任何伤害。除此之外,我真的不确定为什么该调用适用于一种布局而不适用于另一种布局。
    • 感谢您的跟进。不,这是对同一个布局文件的调用,并转换为 TextView。比它早 12 行...
    【解决方案2】:

    试试这个

    View season = (View)mInflater.inflate(R.layout.section_title, null);
    TextView seasonTv =  (TextView)findViewById(R.id.seasonTitle);
    

    您试图膨胀布局并将其转换为 TextView 小部件。 你应该膨胀布局并找到小部件

    【讨论】:

    • 你是说布局文件中的视图必须有一个基于 ViewGroup/Layout 的视图作为父视图吗?我知道布局文件中允许任何视图。