मैंने नेविगेशन ड्रॉअर लैग के साथ कैसे संघर्ष किया

हेलो, हेब्र!

मेरा नाम एलेक्स है। मैं Android के लिए विकसित कर रहा हूं। एमुलेटर में डिबगिंग मौत की तरह है, इसलिए मैं अपने एचटीसी डिजायर एचडी का उपयोग करता हूं। जानवर पहले से ही बहुत प्राचीन है, जिसके लिए मैं मदद नहीं कर सकता, लेकिन इसे प्यार कर सकता हूं, क्योंकि इस पर आवेदन में कोई खुरदरापन और अनियमितताएं गौरवशाली लैग्स द्वारा दी गई हैं। वैसे, मैं आपकी परियोजनाओं को मध्यम-शक्ति उपकरणों पर लॉन्च करने की अत्यधिक सलाह देता हूं, क्योंकि सभी उपयोगकर्ताओं के पास फ़्लैगशिप नहीं हैं। इसलिए, अपने नए आवेदन पर काम करते समय, मैंने पाया कि नेविगेशन ड्रावर के माध्यम से टुकड़ों के बीच स्विच करते समय, नेविगेशन पर्दे पर स्पष्ट रूप से। एक खंड बनाते समय, डेटाबेस से प्रश्न किए गए और साझा किए गए संदर्भ लोड किए गए। मैं सिर्फ इस अंतराल को देखने के लिए निराश था, और मुझे पता चला कि इससे कैसे छुटकारा पाया जाए। कोई भी, बिल्ली के नीचे, कृपया, रुचि रखता है।

मैंने नेवीगेशनड्रावर और तीन स्निपेट (लेख के अंत में गीथूब से लिंक) के साथ एक सरल परियोजना बनाई। कोड आदर्श होने का दावा नहीं करता है, मैंने यथासंभव सरल और स्पष्ट लिखने की कोशिश की। पर्दा कोड सीधे Google उदाहरणों से लिया गया है। मैंने समस्या को बहुत सरलता से और माथे में हल किया: एक टुकड़े को लोड करना एक अलग थ्रेड में लॉन्च किया जाता है और 0.3 सेकंड (एक जादुई संख्या को प्रयोगात्मक रूप से चयनित) द्वारा विलंबित किया जाता है।

सबसे पहले, हम श्रोता को इस प्रकार सूची आइटम पर लटकाते हैं:

mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 


और SelectItem विधि इस प्रकार थी:

 private void selectItem(int position) { Fragment fragment = new ContentFragment(); Bundle args = new Bundle(); args.putInt("positions", position); fragment.setArguments(args); FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); mDrawerList.setItemChecked(position, true); setTitle(leftDrawerTitles[position]); mDrawerLayout.closeDrawer(mDrawerList); } 


और अंतराल को दूर करने के लिए, हम इन दो स्थानों को बदलते हैं:

1) SelectItem से हम सक्रिय तत्व का चयन करने और ड्रॉयर को बंद करने के लिए सभी कोड onCreate पर स्थानांतरित करते हैं। selectItem इस तरह बन जाएगा:

 private void selectItem(int position) { Fragment fragment = new ContentFragment(); Bundle args = new Bundle(); args.putInt("positions", position); fragment.setArguments(args); FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); } 


2) और ऑनक्रिएट में हम श्रोता को ड्रावर तत्वों पर लटकाते हैं और स्ट्रीम शुरू करते हैं:

 mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> adapterView, View view, final int position, long l) { mDrawerList.setItemChecked(position, true); setTitle(leftDrawerTitles[position]); mDrawerLayout.closeDrawer(mDrawerList); //          0.3 , //      new Thread(new Runnable() { public void run() { try { TimeUnit.MILLISECONDS.sleep(300); selectItem(position); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } }); 


वह सब है। यह एक बेतुका बैसाखी हो सकता है, लेकिन मैं अभी भी इसे अपने लिए खोज कर बहुत खुश था।

पीएस मैं फोन पर डिबगिंग के बारे में जोड़ना चाहूंगा। मैं अत्यधिक एडीबी ओवर वाई-फाई (रूट विशेषाधिकार आवश्यक हैं) का उपयोग करने की सलाह देता हूं। वाई-फाई आपको आंदोलनों और डिवाइस के घुमावों में सीमित नहीं करता है।
पीपीएस मैं वास्तव में रचनात्मक आलोचना और जानकार लोगों से सलाह लेना चाहता हूं।

रिपॉजिटरी से लिंक: https://github.com/Rozag/Lags-free-navigation-drawer

Source: https://habr.com/ru/post/In220835/


All Articles