2012-10-15 9 views
6

पर बंद है मेरे पास मेरे आवेदन में यह PopupMenu है और यह जानना चाहेंगे कि यह कब बंद है। API14 के साथ + setOnDismissListener() के साथ एक डेमरी श्रोता जोड़ने पर यह आसान है। लेकिन, मुझे यह जानना होगा कि पॉपअपमेनू एपीआई 11 + से कब बंद है, इसलिए मैं श्रोता का उपयोग नहीं कर सकता और श्रोता के लिए एक विकल्प की आवश्यकता नहीं है।पता लगाएं कि एक पॉपअपमेनू एपीआई स्तर 11

यह मैं पहले से ही करने की कोशिश की:

  • ओवरराइड PopupMenu की dismiss() विधि, लेकिन जब यह बंद कर दिया है यह नहीं कहा गया है।
  • PopupMenu.OnMenuItemClickListener का उपयोग करें, लेकिन यह उपयोगकर्ता सक्रिय नहीं होता है जब उपयोगकर्ता मेनू के बाहर क्लिक किया जाता है (इसे बंद करने के लिए) या 'बैक' पर क्लिक करता है।

मेरे पास यह पता लगाने के लिए कोई अन्य विचार नहीं है कि मेनू बंद था। तो मैं उम्मीद कर रहा हूं कि किसी और के पास एक चतुर चाल है। अन्यथा मैं PopupMenu ...

+0

थोड़ा हैकी, लेकिन क्या आप अंतर्निहित दृश्य या व्यूग्रुप से 'ऑनफोकस चेंजलिस्टर' सेट कर सकते हैं? मुझे यकीन नहीं है कि यह ईमानदार होने के लिए आग लगेगा, लेकिन यह पहली बात है जिसे मैं सोच सकता हूं। इसके अलावा, आप 3 अंक (menuItemClick, बैक बटन, सामग्री दृश्य के स्पर्श पर) सुन सकते हैं, लेकिन मुझे यकीन है कि इससे कुछ बेहतर होना चाहिए। – Geobits

+0

@Gobits आपके विचार के लिए धन्यवाद (मैंने इसके बारे में सोचा नहीं था)। लेकिन दुर्भाग्यवश 'ऑनफोकस चेंजलिस्टर' का उपयोग कर काम नहीं कर रहा है। मेरे पास केवल एक दृश्य है (जिस पर मैं अपना यूआई खींचता हूं), और ऐसा प्रतीत नहीं होता है कि यह कभी भी फोकस (या खो देता है) ... – Veger

उत्तर

1

उपयोग नहीं कर सकते आप विधि

public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) 
PopupMenu वर्ग के

ओवरराइड करने के लिए कोशिश कर सकते हैं। वास्तव में यह विधि API 14+ में आंतरिक रूप से setOnDismissListener() पर कॉल कर रही है। लेकिन यह करना आसान नहीं है। समस्या यह है कि कक्षा com.android.internal.view.menu.MenuBuilder एंड्रॉइड एसडीके में शामिल नहीं है, इसलिए यदि आप इस कक्षा को आयात करने का प्रयास करेंगे तो आप अपना कोड संकलित नहीं कर पाएंगे।

लेकिन, आप, अपने खुद के "नकली" इस वर्ग के कार्यान्वयन बना सकते हैं पैकेज com.android.internal.view.menu में रखें, इसके साथ एक .jar फ़ाइल बनाने libs फ़ोल्डर में इस "नकली पुस्तकालय" कॉपी और परियोजना सेटिंग्स में इस लाइब्रेरी का दायरा सेट "प्रदान" के रूप में IntelliJ IDEA का। इसका मतलब यह है कि इस jar फ़ाइल में कक्षाओं में पहले से ही असली डिवाइस हैं (सत्य क्या है) और आपको केवल उन्हें अपने कोड को संकलित करने की आवश्यकता है। यहां मुख्य विचार - आपका नकली MenuBuilderjavac संकलन के लिए कक्षापथ में होना चाहिए, लेकिन .apk फ़ाइल में शामिल होना चाहिए।

यह आसान समाधान नहीं है, लेकिन इसे काम करना चाहिए।

+0

आपके विचार के लिए धन्यवाद! यह मेरी समस्या का समाधान प्रदान कर सकता है, मुझे लगता है। मैंने 'मेनूबिल्डर' (अच्छा विचार!) के लिए नकली कार्यान्वयन बनाया है, लेकिन मुझे स्कोप सेटिंग नहीं मिल रही है (यह मैवेन विशिष्ट है? मैं मेवेन का उपयोग नहीं करता), क्या आप यह बता सकते हैं कि मुझे इसे कहां मिलना चाहिए? इसके अलावा, 'onCloseMenu() 'विधि को ओवरराइड नहीं किया जा सकता है, या ऐसा लगता है। '@ ओवरराइड' एनोटेशन को हटाने से यह समस्या हल हो जाती है, लेकिन मुझे चेतावनी मिलती है कि इसका कभी भी उपयोग नहीं किया जाता है। तो मुझे लगता है कि यह काम नहीं करता है? कोई अतिरिक्त विवरण बहुत स्वागत है! – Veger

+0

कुछ और परीक्षणों के बाद, मैं अपने एपीआई 14 + डिवाइस पर काम करता हूं, लेकिन एक एपीआई 11 डिवाइस के साथ नहीं (जिसके लिए इसे समाधान प्रदान करना चाहिए)। क्या यह मामला हो सकता है कि API11 में 'onCloseMenu()' विधि नहीं है, इसलिए इसे नहीं कहा जा रहा है? – Veger

+0

आप कम से कम IntelliJ IDEA में पुस्तकालयों के लिए "स्कोप" कॉन्फ़िगर कर सकते हैं। मुझे लगता है कि एंटी या मेवेन का उपयोग करके पूरा करने के लिए कुछ ऐसा संभव होना चाहिए, मैंने अभी तक यह कोशिश नहीं की है। – HitOdessit

संबंधित मुद्दे