4 xml android constructor exception custom-view
我有一个自定义View扩展SurfaceView.XML布局是
<com.myPackage.MyCustomView
android:id="@+id/mycview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
Run Code Online (Sandbox Code Playgroud)
这堂课是:
public class MyCustomView extends SurfaceView{
public float[] xpositions;
public float[] ypositions;
public String[] units;
public MyCustomView(Context context, float[] xpos, float[] ypos,String[] u) {
super(context);
xpositions=xpos;
ypositions =ypos;
units=u;
}
}
Run Code Online (Sandbox Code Playgroud)
在此方法的上下文活动中,我有以下行
MyCustomView mv = (MyCustomView)findViewById(R.id.mycview);
Run Code Online (Sandbox Code Playgroud)
Logcat输出具有以下内容
01-30 01:51:12.124: ERROR/AndroidRuntime(4934): Caused by: java.lang.NoSuchMethodException:MyCustomView(Context,AttributeSet)
01-30 01:51:12.124: ERROR/AndroidRuntime(4934): at java.lang.Class.getMatchingConstructor(Class.java:674)
01-30 01:51:12.124: ERROR/AndroidRuntime(4934): at java.lang.Class.getConstructor(Class.java:486)
01-30 01:51:12.124: ERROR/AndroidRuntime(4934): at android.view.LayoutInflater.createView(LayoutInflater.java:475)
Run Code Online (Sandbox Code Playgroud)
由于某种原因,我的构造函数导致上述异常.我很感激任何帮助找到代码的错误.
更新:我更改了构造函数以添加AttributeSet,并在我的活动中编写了以下内容:
XmlPullParser parser = getResources().getXml(R.id.mycview);
AttributeSet attributes = Xml.asAttributeSet(parser);
MyCustomView cv = new MyCustomView(this,attributes,xx,yy,uu);
cv = (MyCustomView)findViewById(R.id.mycview);
Run Code Online (Sandbox Code Playgroud)
但是我得到了相同的logcat输出.
Rot*_*miz 20
您没有正确的构造函数MyCustomView(Context,AttributeSet)
如果要扩展视图并在代码中创建新视图,则必须创建以下构造函数.使用initYourStuff()
来初始化你的东西),你也可以参数化,当然他们...
public MyCustomView(Context context)
{
super(context);
this.context = context;
initYourStuff();
}
public MyCustomView(Context context, AttributeSet attrs)
{
super(context, attrs);
this.context = context;
initYourStuff();
}
public MyCustomView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
this.context = context;
initYourStuff();
}
Run Code Online (Sandbox Code Playgroud)