我有一个自定义视图(扩展了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)
不存在(虽然它肯定在我的代码中)。
任何人都有关于可能发生的事情的任何提示?
答案 0 :(得分:0)
我终于弄明白了。我已经将我的构造函数(未被调用的构造函数)定义为:
public ChartView( MyActivity context, AttributeSet attrs )
{
super( context, attrs );
….
}
然而,当我将构造函数更改为:
时,它开始工作public ChartView( Context context, AttributeSet attrs )
{
super( context, attrs );
….
}
鉴于MyActivity扩展了Activity(扩展了Context),这是完全有效的代码,我相信它应该可行(它肯定会编译)。看起来系统在查找此方法时使用的反射中存在错误。