2011-09-25 19 views
5

me gustaría escuchar una pulsación larga en mi aplicación Android, ya partir de Android 2.0 no es un métodoAndroid - método de reemplazo de alta versión de la API y el apoyo a la API versión más baja

public boolean onKeyLongPress(int keyCode, KeyEvent event) 

para anular. Pero, ¿qué puedo hacer si mi aplicación tiene que ser compatible con la API 4 (Android 1.6)? Sé que puedo llamar a los métodos API con la reflexión, pero estoy bastante seguro de que no puedo anular con la reflexión.

Respuesta

0

Lo más fácil es escribir dos implementaciones de la clase de vista personalizada, dicen:

MyCustomViewBasic extends View { 
    private MySharedImplementation impl; 
} 

MyCustomViewKeyLongPress extends View { 
    private MySharedImplementation impl; 

    @Override 
    public boolean onKeyLongPress(int keyCode, KeyEvent event) { 
     // Do something exciting 
    } 
} 

Estas dos implementaciones pueden compartir todos los detalles de implementación como sea posible, al tiempo que garantiza que cualquier cosa que no está disponible en el nivel API 4 no es en la implementación compartida.

Luego tienen dos diseños xml, uno para el nivel API 4 y uno para el nivel 4 API y superior. Use MyCustomViewBasic en el diseño para API nivel 4 y MyCustomViewKeyLongPress en uno para API nivel 4 y superior

+0

lamentablemente me gustaría hacer esto para la actividad – Axarydax

5

¿Por qué no elimina la anotación @Override arriba del método? Android 1.6 lo ignoraría, 2.0 aún lo interpretaría correctamente.

+0

anulando la función no es la parte difícil ... este tipo de evento requiere el uso de super.onKeyLongPress() dentro de él para manejar correctamente la cadena de eventos. Android <2.0 se ahogará en el super.onKeyLongPress() porque no existe y no hay forma de llamar a super.whatever() con reflejo en Java. Estoy atrapado tratando de encontrar la manera de hacer que funcione este mismo tipo de cosas para API 3 y también estoy perdido. –

Cuestiones relacionadas