Autore Topic: passare SurfaceView come view a PopupMenu  (Letto 511 volte)

Offline esnho

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
passare SurfaceView come view a PopupMenu
« il: 04 Dicembre 2013, 16:47:33 CET »
0
Ciao, sto cercando di implementare la visualizzazione di un PopupMenu da un LongPress in una SurfaceView.

Quando provo a inizializzare l'oggetto PopupMenu l'app si interrompe con questo errore in LogCat:

Codice: [Seleziona]
12-04 16:29:15.301: E/AndroidRuntime(3580): FATAL EXCEPTION: main
12-04 16:29:15.301: E/AndroidRuntime(3580): Process: esnho.knob2, PID: 3580
12-04 16:29:15.301: E/AndroidRuntime(3580): java.lang.ClassCastException: android.view.SurfaceView$4 cannot be cast to android.view.View
12-04 16:29:15.301: E/AndroidRuntime(3580):         at esnho.controls.Controls$1.onLongPress(Controls.java:150)
12-04 16:29:15.301: E/AndroidRuntime(3580):         at android.view.GestureDetector.dispatchLongPress(GestureDetector.java:690)
12-04 16:29:15.301: E/AndroidRuntime(3580):         at android.view.GestureDetector.access$200(GestureDetector.java:37)
12-04 16:29:15.301: E/AndroidRuntime(3580):         at android.view.GestureDetector$GestureHandler.handleMessage(GestureDetector.java:266)
12-04 16:29:15.301: E/AndroidRuntime(3580):         at android.os.Handler.dispatchMessage(Handler.java:102)
12-04 16:29:15.301: E/AndroidRuntime(3580):         at android.os.Looper.loop(Looper.java:137)
12-04 16:29:15.301: E/AndroidRuntime(3580):         at android.app.ActivityThread.main(ActivityThread.java:4998)
12-04 16:29:15.301: E/AndroidRuntime(3580):         at java.lang.reflect.Method.invokeNative(Native Method)
12-04 16:29:15.301: E/AndroidRuntime(3580):         at java.lang.reflect.Method.invoke(Method.java:515)
12-04 16:29:15.301: E/AndroidRuntime(3580):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
12-04 16:29:15.301: E/AndroidRuntime(3580):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
12-04 16:29:15.301: E/AndroidRuntime(3580):         at dalvik.system.NativeStart.main(Native Method)

La classe dentro la quale inizializzo il popup è una SurfaceView che implementa SurfaceHolder.Callback

Questo è la porzione di codice che richiama il popup e che genera l'errore
Codice (Java): [Seleziona]
private final GestureDetector.SimpleOnGestureListener mGestureListener = new GestureDetector.SimpleOnGestureListener() {
                @Override
            public void onLongPress(MotionEvent e) {
                        Log.v("longpress", e+"");
                        //PopupMenu p = new pop
                        PopupMenu popupMenu = new PopupMenu(getContext(), (View) surfaceHolder);
                        popupMenu.getMenuInflater().inflate(R.menu.controlspopup,
                                        popupMenu.getMenu());

                        popupMenu
                                        .setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

                                                @Override
                                                public boolean onMenuItemClick(MenuItem item) {
                                                        Toast.makeText(getContext(),
                                                                        item.toString(), Toast.LENGTH_LONG).show();
                                                        return true;
                                                }
                                        });

                        popupMenu.show();
            }
        };

Allego un progetto di esempio a questo link: https://dl.dropboxusercontent.com/u/18517799/popupEsempio.zip