EditText上的OnClick方法使应用程序崩溃

时间:2016-05-15 19:56:23

标签: android onclick android-edittext

我遇到过我的应用程序在单击EditText标记时停止,该标记附加了调用新活动的OnClick方法。 这是布局:

        <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/location"
        android:onClick="LaunchMap"
        android:hint="Vieta"
        android:layout_below="@+id/end_date"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_alignLeft="@+id/end_date"
        android:layout_alignStart="@+id/end_date"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:editable="false"/>

然后在我的活动课程Main2Activity.java

   public void LaunchMap(View view){
    Intent intent = new Intent(Main2Activity.this, MapsActivity2.class);
    startActivity(intent);
}

和logcat信息:

    05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime: FATAL EXCEPTION: main
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime: Process: com.example.rimvydas.projektas, PID: 14898
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime: java.lang.IllegalStateException: Could not find a method LaunchMap(View) in the activity class android.support.v7.internal.widget.TintContextWrapper for onClick handler on view class android.support.v7.widget.AppCompatEditText with id 'location'
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at android.view.View$1.onClick(View.java:3844)
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at android.view.View.performClick(View.java:4472)
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at android.view.View$PerformClick.run(View.java:18779)
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:808)
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:103)
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:193)
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5333)
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:515)
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:  Caused by: java.lang.NoSuchMethodException: LaunchMap [class android.view.View]
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at java.lang.Class.getConstructorOrMethod(Class.java:472)
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at java.lang.Class.getMethod(Class.java:864)
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at android.view.View$1.onClick(View.java:3837)
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at android.view.View.performClick(View.java:4472) 
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at android.view.View$PerformClick.run(View.java:18779) 
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:808) 
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:103) 
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:193) 
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5333) 
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method) 
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:515) 
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829) 
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645) 
05-15 22:47:51.400 14898-14898/com.example.rimvydas.projektas E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)

奇怪的是..如果我把这个相同的OnClick方法LaunchMap放在let say按钮上,它工作正常..那么如何在EditText字段上调用OnClick?

2 个答案:

答案 0 :(得分:1)

在运行之前检查布局的xlm文本版本。我有一个类似的问题,Android Studio自动更改(我忽略的原因)onClick引用从“methodName”到“methodName(ActivityName),导致应用停止。

在您的情况下,例如,如果在MainActivity中定义了方法,它将从“LaunchMap”更改为“LaunchMap(MainActivity)”。

答案 1 :(得分:0)

这似乎是编译器错误,您的编译器无法将您的方法名称“LaunchMap”从XML文件链接到mainActivity。我建议你更改方法名称,保存项目,在XML文件中使用新名称并再次运行项目。 另一方面,您可以通过编程方式使用onClickListener:

location.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            LunchMap();
        }
    });

如果要以编程方式进行编程,则应从方法LunchMap中删除输入参数View