हमारे तरीकों में से एक में, हम सूची दृश्य में चिकनी स्क्रॉलिंग का उपयोग नहीं करते हैं। चूंकि यह विधि API स्तर 8 (FROYO) से पहले उपलब्ध नहीं है, इसलिए हमने पिछले एसडीके संस्करणों में विधि को कॉल करने से रोकने के लिए TargetApi एनोटेशन का उपयोग किया था।लक्ष्य एपीआई
जैसा कि आप देख सकते हैं, हम क्लास परिभाषा में और कक्षाओं की वस्तुओं का उपयोग करने वाले बयानों में लक्ष्यएपी एनोटेशन का उपयोग करते हैं। यह आवश्यक से अधिक है।
हमारी समस्या यह है कि लक्ष्य एपीआई एनोटेशन को ध्यान में नहीं रखा जाता है और संस्करण ईसीएलआईआर (एसडीके 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());
}
}
BTW, हम डिबग मोड में कोड चलाने के लिए, तो समस्या से संबंधित नहीं है obotuscation एनोटेशन को हटा रहा है।
बीटीडब्ल्यू, आप '@TargetApi (Build.VERSION_CODES.FROYO)' 'TargetApi (8) 'के बजाय' @TargetApi (Build.VERSION_CODES.FROYO) लिख सकते हैं। – Wyzard
आप सही हैं। और इसके लिए आपका लक्ष्य एसडीके जितना संभव हो उतना उच्च होना चाहिए। – Snicolas