メソッドの 1 つで、リスト ビューで SmoothScrolling を使用します。このメソッドは API レベル 8 (FROYO) より前では使用できないため、TargetApi アノテーションを使用して、以前の SDK バージョンでメソッドが呼び出されないようにしました。
ご覧のとおり、クラス定義とクラスのオブジェクトを使用するステートメントの両方で 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() );
}
}
ところで、デバッグ モードでコードを実行するため、問題は注釈の難読化とは関係ありません。