TargetApi nicht berücksichtigt
In einer unserer Methoden verwenden wir smoothScrolling in einer Listenansicht. Da diese Methode vor API Level 8 (FROYO) nicht verfügbar ist, haben wir die TargetApi-Annotation verwendet, um zu verhindern, dass die Methode in früheren SDK-Versionen aufgerufen wird.
Wie Sie sehen können, wirtun Verwenden Sie die TargetApi-Annotation sowohl in der Klassendefinition als auch in Anweisungen, die die Objekte der Klasse verwenden. Das ist mehr als nötig.
Unser Problem ist, dass die TargetApi-Annotation nicht berücksichtigt wird und unser Emulator in Version ECLAIR (SDK 7) abstürzt. Durch die Ablaufverfolgung stellen wir lediglich fest, dass der Code, der nur in Version 8+ ausgeführt werden soll, auch in Version 7 ausgeführt wird.
Vermissen wir etwas?
Dieser Code befindet sich in einem Listener:
@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 );
}
}
}
Und der Zuhörer wird so registriert:
@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() );
}
}
Übrigens, wir führen den Code im Debug-Modus aus, sodass das Problem nicht mit dem Entfernen von Anmerkungen durch Verschleierung zusammenhängt.