TargetApi nie jest brany pod uwagę

W jednej z naszych metod używamy smoothScrolling w widoku listy. Ponieważ ta metoda nie jest dostępna przed API Level 8 (FROYO), użyliśmy adnotacji TargetApi, aby zapobiec wywołaniu metody w poprzednich wersjach SDK.

Jak widać, myrobić użyj adnotacji TargetApi zarówno w definicji klasy, jak iw instrukcjach, które używają obiektów klasy. To więcej niż potrzeba.

Naszym problemem jest to, że adnotacja TargetApi nie jest brana pod uwagę i powoduje awarię naszego emulatora w wersji ECLAIR (SDK 7). Śledząc, zdajemy sobie sprawę, że kod, który powinien być wykonywany tylko w wersjach 8+, jest również wykonywany w wersji 7.

Czy coś nam brakuje?

Ten kod jest w słuchaczu:

@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 );
        }
    }
}

A słuchacz jest zarejestrowany w ten sposób:

@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() );
    }
}

BTW, uruchamiamy kod w trybie debugowania, więc problem nie jest związany z usuwaniem adnotacji.

questionAnswers(3)

yourAnswerToTheQuestion