TargetApi не учитывается

В одном из наших методов мы используем smoothScrolling в виде списка. Поскольку этот метод недоступен до API уровня 8 (FROYO), мы использовали аннотацию TargetApi для предотвращения вызова метода в предыдущих версиях SDK.

Как видите, мыdo используйте аннотацию TargetApi как в определении класса, так и в операторах, которые используют объекты класса. Это больше, чем нужно.

Наша проблема заключается в том, что аннотация TargetApi не учитывается и приводит к сбою нашего эмулятора в версии ECLAIR (SDK 7). Отслеживая, мы просто понимаем, что код, который должен выполняться только в версиях 8+, также выполняется в версии 7.

Мы что-то упустили?

Этот код находится в слушателе:

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

И слушатель регистрируется так:

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

Кстати, мы запускаем код в режиме отладки, поэтому проблема не связана с обфускацией удаления аннотаций.

Ответы на вопрос(3)

Ваш ответ на вопрос