在我们的一种方法中,我们在列表视图中使用 smoothScrolling。由于此方法在 API Level 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() );
}
}
顺便说一句,我们在调试模式下运行代码,所以这个问题与混淆删除注释无关。