2015-05-25 1 views
-5

У меня есть ImageButton, и я хочу использовать его в определенном классе фрагментов моего приложения. Но когда я использую его в своем классе фрагмента, приложение падает. НО я могу использовать его в моей MainActivity без сбоев. Как я могу это исправить?onClick метод работает только в MainActivity

Это код, я использую в своем классе фрагмент

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

    } 

Это приводит приложение crash.But, когда я использую это в моем MainActivity (в mainactivity «деятельности» заменяется this.getApplicationContext) оно работает.

Моя кнопка 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$1.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$1.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) 
+0

проверить это - http://stackoverflow.com/a/21192511/1479511 – NarendraJi

+1

проверить ответ http://stackoverflow.com/a/7808223/1168654 решение http://stackoverflow.com/a/6271637/1168654 –

ответ

6

java.lang.IllegalStateException: Не удалось найти метод showPopup (View) в классе деятельности com.fm. etunes.phone.MainActivity для обработчика onClick на классе вида android.widget.ImageButton с идентификатором 'popUp'

Вы получаете это исключение, потому что этот метод щелчка должен быть определен в вашей деятельности, а не в фрагменте.

Подробнее ... работает только для деятельности. Поэтому, если вы хотите определить его для макета фрагмента, вам нужно определить прослушиватель кликов в родительской активности, откуда вы вызываете фрагмент.

В вашем случае просто переместите метод showPopup(View v) в родительскую активность, откуда вы заменяете фрагмент.

+0

Вы можете объяснить больше с помощью некоторого кода? – CraZyDroiD

+1

@CraZyDroiD вы можете полностью прочитать ответ и попробовать реализовать себя в первую очередь? –

 Смежные вопросы

  • Нет связанных вопросов^_^