Custom SurfaceView causing NoSuchMethodException

对着背影说爱祢 提交于 2019-11-27 22:37:50

问题


I have a custom View extending SurfaceView. The XML layout is

<com.myPackage.MyCustomView
  android:id="@+id/mycview"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"/>

The class is :

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;


     }
}

In the context Activity for this method, I have the following line

MyCustomView mv = (MyCustomView)findViewById(R.id.mycview);

The Logcat output has the following

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)

For some reason, my constructor is causing above exception. I would appreciate any help finding what is wrong with the code.

UPDATE: I changed the constructor to add AttributeSet and in my activity wrote the following:

 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);

But I get the same logcat output.


回答1:


You don't have the correct constructor MyCustomView(Context,AttributeSet)

You must create the following constructors if you want to inflate views, and create new one in code. use initYourStuff() to init your stuff ;) , you can also parametrize them of course...

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();
}


来源:https://stackoverflow.com/questions/9054894/custom-surfaceview-causing-nosuchmethodexception

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!