onClick 方法仅适用于 MainActivity
onClick method works only in MainActivity
我有一个 ImageButton,我想在我的应用程序的某个片段 class 中使用它。但是当我在我的片段 class 中使用它时,应用程序崩溃了。但是我可以在我的 MainActivity 中使用它而不会崩溃。我该如何解决这个问题?
这是我在片段中使用的代码 class
public void showPopup(View v) {
PopupMenu popup = new PopupMenu(activity, v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.song_popup, popup.getMenu());
popup.show();
}
当我在我的 MainActivity 中使用它时(在 mainactivity 中 "activity" 被 this.getApplicationContext 取代),这会导致一个应用程序 crash.But 它可以工作。
我的按钮xml
<ImageButton
android:id="@+id/popUp"
android:layout_width="20dp"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:layout_marginRight="2dp"
android:background="@null"
android:src="@drawable/abc_ic_menu_moreoverflow_mtrl_alpha"
android:onClick="showPopup" />
LOGCAT
java.lang.IllegalStateException: Could not find a method showPopup(View) in the activity class com.fm.etunes.phone.MainActivity for onClick handler on view class android.widget.ImageButton with id 'popUp'
at android.view.View.onClick(View.java:3814)
at android.view.View.performClick(View.java:4442)
at android.view.View$PerformClick.run(View.java:18473)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NoSuchMethodException: showPopup [class android.view.View]
at java.lang.Class.getConstructorOrMethod(Class.java:472)
at java.lang.Class.getMethod(Class.java:857)
at android.view.View.onClick(View.java:3807)
at android.view.View.performClick(View.java:4442)
at android.view.View$PerformClick.run(View.java:18473)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606)
at dalvik.system.NativeStart.main(Native Method)
java.lang.IllegalStateException: Could not find a method
showPopup(View) in the activity class com.fm.etunes.phone.MainActivity
for onClick handler on view class android.widget.ImageButton with id
'popUp'
您遇到此异常是因为此点击方法应该在您的 activity 中定义,而不是在片段中定义。
更详细地说,android:onClick
仅适用于 activity。因此,如果您想为片段布局定义它,则必须在调用片段的父级 activity 中定义点击侦听器。
在您的情况下,只需将父 activity 中的 showPopup(View v)
方法从您要替换片段的位置移动。
我有一个 ImageButton,我想在我的应用程序的某个片段 class 中使用它。但是当我在我的片段 class 中使用它时,应用程序崩溃了。但是我可以在我的 MainActivity 中使用它而不会崩溃。我该如何解决这个问题?
这是我在片段中使用的代码 class
public void showPopup(View v) {
PopupMenu popup = new PopupMenu(activity, v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.song_popup, popup.getMenu());
popup.show();
}
当我在我的 MainActivity 中使用它时(在 mainactivity 中 "activity" 被 this.getApplicationContext 取代),这会导致一个应用程序 crash.But 它可以工作。
我的按钮xml
<ImageButton
android:id="@+id/popUp"
android:layout_width="20dp"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:layout_marginRight="2dp"
android:background="@null"
android:src="@drawable/abc_ic_menu_moreoverflow_mtrl_alpha"
android:onClick="showPopup" />
LOGCAT
java.lang.IllegalStateException: Could not find a method showPopup(View) in the activity class com.fm.etunes.phone.MainActivity for onClick handler on view class android.widget.ImageButton with id 'popUp'
at android.view.View.onClick(View.java:3814)
at android.view.View.performClick(View.java:4442)
at android.view.View$PerformClick.run(View.java:18473)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NoSuchMethodException: showPopup [class android.view.View]
at java.lang.Class.getConstructorOrMethod(Class.java:472)
at java.lang.Class.getMethod(Class.java:857)
at android.view.View.onClick(View.java:3807)
at android.view.View.performClick(View.java:4442)
at android.view.View$PerformClick.run(View.java:18473)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606)
at dalvik.system.NativeStart.main(Native Method)
java.lang.IllegalStateException: Could not find a method showPopup(View) in the activity class com.fm.etunes.phone.MainActivity for onClick handler on view class android.widget.ImageButton with id 'popUp'
您遇到此异常是因为此点击方法应该在您的 activity 中定义,而不是在片段中定义。
更详细地说,android:onClick
仅适用于 activity。因此,如果您想为片段布局定义它,则必须在调用片段的父级 activity 中定义点击侦听器。
在您的情况下,只需将父 activity 中的 showPopup(View v)
方法从您要替换片段的位置移动。