检索自定义视图时出现Android ClassCastException

尝试使用findViewById()获取自定义View时,我遇到了一个问题。 否则,自定义视图将正确显示和运行。 不幸的是,我需要能够随意更改它显示的一些数据,因此必须完成。

我的XML看起来像这样:

    

我知道有时问题是人们不小心在XML中命名组件“View”而不是它们的子类。

在我的Activity的onCreate()方法中,我有这个:

 myChart=(Chart)findViewById(R.id.chart); //where myChart is an object of type Chart 

抛出ClassCastException。

我决定尝试一下,然后将行更改为此,以查看是否仍然收到ClassCastException:

 View chart=(View)findViewById(R.id.chart); 

这很好用,告诉我findViewById给我一个View没有问题。 但它不想给我一张图表。

就Chart类而言,它是View的一个非常简单的子类,看起来可以正常工作。

 public class Chart extends View{ public Chart(Context context) { super(context); init(); } public Chart(Context context, AttributeSet attrs) { super(context, attrs); init(); } public Chart(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } /* More stuff below like onDraw, onMeasure, setData, etc. */ } 

我可能只是在做一些愚蠢的事情。 你们有什么想法吗? 谢谢你的帮助!

出于好奇,xml是否在另一个带有标签的布局中使用?

我有一个像这样的问题,我们在viewflipper中包含了另一个xml布局

findviewbyid获取了错误的小部件。 我必须将整个外部布局包装在标记中,以允许它正确地合并到基本布局中。

如果要包含布局,请尝试将布局更改为此布局。

       

编辑:查看此链接有关合并的工作原理

这很可能是一个错误。

要解决的解决方法:在Layout XML和findViewById()中为CustomView使用一些新的“id”值。

findViewById将始终返回View对象。 您将只能访问视图类中指定的方法,并且Chart类的任何方法都不是accessbile。

如果需要访问任何特定于图表的方法或数据,则需要将视图对象转换为Chart。