安卓:java.lang.ClassCastException:android.widget.imageView无法转换为android.widget.textView

60

我无法修复我的listview模板上的这个问题:我遇到了帖子标题中的错误,但我不想将ImageView强制转换为TextView。这是我的代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="200dip"
android:layout_weight="1"
android:paddingBottom="10dip" >

<TextView
    android:id="@+id/mq"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:text="Metri quadri"
    android:textColor="#33b5e5"
    android:textSize="14sp"
    android:textStyle="bold" />

<TextView
    android:id="@+id/citta"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/mq"
    android:layout_alignBottom="@+id/mq"
    android:layout_centerHorizontal="true"
    android:text="Citta"
    android:textColor="#33b5e5"
    android:textSize="14sp"
    android:textStyle="bold" />

<TextView
    android:id="@+id/prezzo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:text="Prezzo"
    android:textColor="#e1e1e1"
    android:textSize="14sp"
    android:textStyle="bold" />

<TextView
    android:id="@+id/nome"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:padding="5dip"
    android:scrollHorizontally="true"
    android:singleLine="true"
    android:text="@string/testolungo"
    android:textColor="#e1e1e1"
    android:textSize="20sp"
    android:textStyle="bold" />

<ImageView
    android:id="@+id/foto"
    android:layout_width="80dip"
    android:layout_height="60dip"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:contentDescription="Release"
    android:padding="5dip"
    android:scaleType="centerCrop"
    android:src="@drawable/stub" />

<TextView
    android:id="@+id/descsplash"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:text="Small Text"
    android:textSize="16sp"
    android:textStyle="italic" />

</RelativeLayout>

这个 Java 代码的错误在我的文件的第58行,那里我将 TextView 的ID分配给 TextView mq:

    View vi=convertView;
    if(convertView==null)
    vi = inflater.inflate(R.layout.listlay, null);
    TextView nome=(TextView)vi.findViewById(R.id.nome);
    TextView mq=(TextView)vi.findViewById(R.id.mq); // here's the error (???)
    TextView citta=(TextView)vi.findViewById(R.id.citta);
    TextView prezzo=(TextView)vi.findViewById(R.id.prezzo);
    ImageView image=(ImageView)vi.findViewById(R.id.foto);
    TextView descrizione = (TextView)vi.findViewById(R.id.descsplash);
    nome.setText(data.get(position).getNome());
    mq.setText(data.get(position).getMetriQuadri());
    citta.setText(data.get(position).getCitta());
    prezzo.setText(data.get(position).getPrezzo());
    descrizione.setText(data.get(position).getDescrizione());
    imageLoader.DisplayImage(data.get(position).getForoUrl(), image);

以下是日志:

06-25 16:08:32.497: D/Debug(14642): Prendo Textview MQ
06-25 16:08:32.497: D/AndroidRuntime(14642): 关闭VM
06-25 16:08:32.497: W/dalvikvm(14642): 线程id=1: 退出具有未捕获异常的线程 (group=0x40a561f8)
06-25 16:08:32.497: E/AndroidRuntime(14642): 致命异常: 主要的
06-25 16:08:32.497: E/AndroidRuntime(14642): java.lang.ClassCastException: android.widget.ImageView无法转换成android.widget.TextView
06-25 16:08:32.497: E/AndroidRuntime(14642): at com.prova.listview.LazyAdapter.getView(LazyAdapter.java:58)

有人知道如何解决这个问题吗?


7
看起来正确。只需尝试清理一下你的项目。 - Praveenkumar
你能张贴目录吗?正如@SpK所建议的,清理可能是你需要的。 - MikeIsrael
06-25 16:08:32.497: D/Debug(14642): Prendo Textview MQ 06-25 16:08:32.497: D/AndroidRuntime(14642): 关闭虚拟机 06-25 16:08:32.497: W/dalvikvm(14642): 线程ID=1:线程退出时出现未捕获的异常(组=0x40a561f8) 06-25 16:08:32.497: E/AndroidRuntime(14642): 致命异常:主要是由于android.widget.ImageView无法转换为android.widget.TextView所致 06-25 16:08:32.497: E/AndroidRuntime(14642): 在com.prova.listview.LazyAdapter.getView(LazyAdapter.java:58) - Release
1
谢谢大家!我该如何清理项目?我是 Android 编程的新手。 - Release
1
@assylias,对不起,我现在知道了。顺便说一下,我通过删除我的R文件解决了我的问题。谢谢。 - Release
显示剩余2条评论
7个回答

180

Eclipse会时不时地弄乱你的资源。这会导致一些奇怪的行为,例如应用程序中字符串和图像被交换,更常见的是ClassCastException(s)出现,当Eclipse改变你的视图id时会发生。

解决该问题的几种方法:

清理项目。

修改xml布局文件并保存。

删除R文件。(不要担心它会自动生成)。

基本上任何能使你的项目重新构建和重新生成R文件的操作都可以。


4

只需清理您的项目,一切就会变得顺利。


4
没帮助,我必须更改视图的ID并重新编译。 - MartinC

1

适用于Visual Studio Xamarin.Android开发

像许多人提到的那样,在Visual Studio上清理项目对我有用。 对于我的Xamarin.Forms应用程序,在引入新库引用的更改后出现了这种情况。

清理您的项目。

基本上,任何使您的项目重新构建和重新生成Rosource.Designer.cs文件的东西。(来自@Benito Bertoli)


1

最初,我遇到了错误:

TextView : android:id="@+id/add_expected_seekbarvalue"

SeekBar : android:id="@+id/add_expected_seekbar"

为了解决这个问题,我将TextViewid重命名为

TextView : android:id="@+id/add_expected_valueseekbar"

即使进行清理和其他技术也没有用,但最终重命名id成功了。


1
有时候出现这个问题是因为我们创建了一个ImageView,但是将其转换为ImageButton,就像这样。
 <ImageView
        android:id="@+id/iv_thumb"
        android:layout_width="50dip"
        android:layout_height="50dip"
        />

  holder.imageView = (ImageButton) convertView.findViewById(R.id.iv_thumb);

我们已经声明了ImageView,但是强制转换成了ImageButton,因此也遇到了这个问题。

0

只需清理您的项目... 我也遇到了类似的问题.. 清理项目后一切都会好起来..祝你好运


0
也许你的 .xml 文件中有一个图像视图和一个按钮,该按钮是动态生成的并在 Java 代码中被赋予了一个 id,这两个 id 随机相同,因此出现了这个错误。 尝试更改您代码中给定的id,问题就会得到解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接