构造函数和onFinishInflate都没有调用自定义视图

时间:2010-12-20 23:16:41

标签: android

我有一个自定义视图(扩展了GLSurfaceView)我正在尝试在我的应用中使用。使用它的xml布局似乎正在正确加载(我为视图设置的属性),但是没有为该类调用视图的构造函数和onFinishInflate方法。我还应该补充一点,我是Android平台的新手,所以这可能是一个愚蠢的错误。

这是我的main.xml

<?xml version="1.0" encoding="utf-8"?>

#<!-- Status Bar -->
<LinearLayout 
    android:orientation="horizontal"
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"
    android:layout_weight="0"
    android:background="@drawable/status_bkg">

    #<!-- Location label -->
    <TextView 
        android:text="Location" 
        android:textColor="#FFFFFF"
        android:layout_weight="1" 
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    #<!-- Date/Time label -->
    <TextView 
        android:text="Date and Time" 
        android:textColor="#FFFFFF"
        android:layout_weight="1" 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="right"  />
</LinearLayout>

#<!-- ChartView -->
<View class="com.xxx.yyy.ChartView" android:id="@+id/chartView"
    android:layout_width="match_parent" 
    android:layout_height="match_parent"
    android:background="#00FF00" 
    android:layout_weight="1">
</View>

ChartView是自定义的GLSurfaceView。加载此布局,ChartView具有指定的绿色背景。但是,我的设置(代码中)都没有发生。我已经尝试将它放在两个构造函数和onFinishInflate方法中,但它们莫名其妙地没有被调用。我已经确认班级名称是正确的(xxx.yyy只是为了在这篇文章中隐藏公司。

我也尝试过不同形式的xml参考

    <com.xxx.yyy.ChartView android:id="@+id/chartView"
    android:layout_width="match_parent" 
    android:layout_height="match_parent"
    android:background="#00FF00" 
    android:layout_weight="1"/>

但是当加载Activity时,这会死掉构造函数

ChartView(上下文上下文,AttributeSet attrs)

不存在(虽然它肯定在我的代码中)。

任何人都有关于可能发生的事情的任何提示?

1 个答案:

答案 0 :(得分:0)

我终于弄明白了。我已经将我的构造函数(未被调用的构造函数)定义为:

public ChartView( MyActivity context, AttributeSet attrs )
{
    super( context, attrs );
….        
}

然而,当我将构造函数更改为:

时,它开始工作
public ChartView( Context context, AttributeSet attrs )
{
    super( context, attrs );
….        
}

鉴于MyActivity扩展了Activity(扩展了Context),这是完全有效的代码,我相信它应该可行(它肯定会编译)。看起来系统在查找此方法时使用的反射中存在错误。