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.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage