TargetApi no se tiene en cuenta

En uno de nuestros métodos, usamos smoothScrolling en una vista de lista. Como este método no está disponible antes del nivel 8 de API (FROYO), usamos la anotación TargetApi para evitar que se llame al método en versiones anteriores del SDK.

Como puedes ver, nosotroshacer use la anotación TargetApi tanto en la definición de la clase como en las declaraciones que usan los objetos de la clase. Esto es más de lo necesario.

Nuestro problema es que la anotación TargetApi no se tiene en cuenta y hace que nuestro emulador se bloquee en la versión ECLAIR (SDK 7). Al rastrear, nos damos cuenta de que el código que solo debe ejecutarse en las versiones 8+ también se ejecuta en la versión 7.

¿Nos estamos perdiendo algo?

Este código está en un oyente:

@TargetApi(8)
private final class MyOnMenuExpandListener implements OnMenuExpandListener {
    @Override
    public void onMenuExpanded( int position ) {
        doScrollIfNeeded( position );
    }

    @Override
    public void onMenuCollapsed( int position ) {
        doScrollIfNeeded( position );
    }

    protected void doScrollIfNeeded( int position ) {
        if ( mListViewDocuments.getLastVisiblePosition() - 2 < position ) {
            mListViewDocuments.smoothScrollToPosition( position + 1 );
        }
    }
}

Y el oyente se registra de esta manera:

@TargetApi(8)
private void allowSmothScrollIfSupported() {
    if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO ) {
        //This if should not be necessary with annotation but it is not taken into account by emulator
        Log.d( LOG_TAG, "Smooth scroll support installed." );
        folderContentAdapter.setOnMenuExpandListener( new MyOnMenuExpandListener() );
    }
}

Por cierto, ejecutamos el código en modo de depuración, por lo que el problema no está relacionado con la ofuscación que elimina las anotaciones.

Respuestas a la pregunta(3)

Su respuesta a la pregunta