Can't find method in the activity
- by Synesso
I'm starting with Scala + Android. I'm trying to wire a button action to a button without the activity implementing View.OnClickListener.
The button click fails at runtime because the method cannot be found. The document I'm working through says that I need only declare a public void method taking a View on the action, and use that method name in the layout.
What have I done wrong?
MainActivity.scala
package net.badgerhunt.hwa
import android.app.Activity
import android.os.Bundle
import android.widget.Button
import android.view.View
import java.util.Date
class MainActivity extends Activity {
override def onCreate(savedInstanceState: Bundle) = {
super.onCreate(savedInstanceState)
setContentView(R.layout.main)
}
def calculate(button: View): Unit = println("calculating with %s ...".format(button))
}
res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/button"
android:text=""
android:onClick="calculate"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
the failure onclick
D/AndroidRuntime( 362): Shutting down VM
W/dalvikvm( 362): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
E/AndroidRuntime( 362): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime( 362): java.lang.IllegalStateException: Could not find a method calculate(View) in the activity
E/AndroidRuntime( 362): at android.view.View$1.onClick(View.java:2020)
E/AndroidRuntime( 362): at android.view.View.performClick(View.java:2364)
E/AndroidRuntime( 362): at android.view.View.onTouchEvent(View.java:4179)
E/AndroidRuntime( 362): at android.widget.TextView.onTouchEvent(TextView.java:6540)
E/AndroidRuntime( 362): at android.view.View.dispatchTouchEvent(View.java:3709)
E/AndroidRuntime( 362): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
E/AndroidRuntime( 362): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
E/AndroidRuntime( 362): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
E/AndroidRuntime( 362): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
E/AndroidRuntime( 362): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
E/AndroidRuntime( 362): at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
E/AndroidRuntime( 362): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
E/AndroidRuntime( 362): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
E/AndroidRuntime( 362): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 362): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 362): at android.app.ActivityThread.main(ActivityThread.java:4363)
E/AndroidRuntime( 362): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 362): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 362): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/AndroidRuntime( 362): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
E/AndroidRuntime( 362): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 362): Caused by: java.lang.NoSuchMethodException: calculate
E/AndroidRuntime( 362): at java.lang.ClassCache.findMethodByName(ClassCache.java:308)
E/AndroidRuntime( 362): at java.lang.Class.getMethod(Class.java:1014)
E/AndroidRuntime( 362): at android.view.View$1.onClick(View.java:2017)
E/AndroidRuntime( 362): ... 20 more