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), utilizamos la anotación TargetApi para evitar que se llame al método en las versiones anteriores del SDK.TargetApi no se tiene en cuenta
Como puede ver, nosotros do utilizamos la anotación de 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 cuelgue 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 falta 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 detector 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, que ejecuta el código en modo de depuración, por lo que el problema no está relacionado con ofuscación eliminando anotaciones.
Por cierto, puede escribir '@TargetApi (Build.VERSION_CODES.FROYO)' en lugar de '@TargetApi (8)'. – Wyzard
Tienes razón. Y para eso, su targetSDK debe ser lo más alto posible. – Snicolas