5

के अंदर से बुलाया जाता है तो मुझे एपीआई कॉल प्रतिक्रिया के आधार पर मेनू आइटम को सक्षम और अक्षम करने की आवश्यकता है और इसे मेनू दिखाए जाने पर इसे हर बार कॉल करना होगा।onPrepareOptionsMenu अजीब काम करता है अगर एपीआई

मैं asynctask की जरूरत है क्योंकि मैं प्रगति

@Override 
    public boolean onPrepareOptionsMenu (Menu menu) { 
     handleMenuItems(menu) 

    } 

    private void handleMenuItems(menu) 
    { 


     new AsyncTask<Void, Void, Void>(){ 

      @Override 
      protected Void doInBackground(Void... params) { 
       //API call     
       return null; 
      } 

      @Override 
      protected void onPostExecute(Void result) { 
       super.onPostExecute(result); 
       if (progressDialog != null) 
        progressDialog.hide(); 

           //necessary menu items are enabled and disabled 
           super.onPrepareOptionsMenu(menu); 
      } 

      @Override 
      protected void onPreExecute() { 
       if (progressDialog != null){ 
        progressDialog.setMessage("Checking"); 
        progressDialog.show(); 
       } 
       super.onPreExecute(); 
      } 

     }.execute(); 

    } 

दिखाने के लिए जब भी मैं विकल्प मेनू onPrepareOptionsMenu कहा जाता हो जाता है स्पर्श है और विकल्प मेनू तो प्रकट नहीं होता है जब मैं यह प्रेस फिर से onPrepareOptionsMenu नहीं मिलता है कहा जाता है और विकल्प मेनू प्रकट होता है।

मैं चाहता हूं कि जब भी मैं विकल्प मेनू के लिए स्पर्श करता हूं तो एपीआई हर बार कॉल किया जाए और मेनू दिखाया जाए।

उत्तर

4

आप दिखाने के लिए और में OnPrepareOptionsMenu

टिप्पणी बाहर प्रगति संवाद छिपा नहीं चाहिए प्रगति संवाद codings और कोड के बाकी ठीक कर रहे हैं और काम करता है आप के रूप में उम्मीद

नोट:

  • आप में super.OnPrepareOptionsMenu कहा जाता है OnPostExecute (यूआई धागा)

  • प्रगति बार की जरूरत नहीं है के रूप में AsyncTask नहीं निकालते हैं अन्यथा मेरी दुर्घटना

3

मुझे नहीं लगता कि यह कोड वह करता है जो आप उम्मीद करते हैं। जब OnPrepareOptionsMenu पहली बार कहा जाता है, तो यह केवल भविष्य में समय पर चलाने के लिए AsyncTask शेड्यूल करता है और तुरंत नहीं। इसके बाद यह super.onPrepareOptionsMenu लाइन निष्पादित करता है जो कि उस समय विकल्प मेनू सेट होने पर भी दिखाना चाहिए। मुझे लगता है (उस पर जांच करनी है) यूआई तब उपयोगकर्ता इनपुट की प्रतीक्षा करेगा क्योंकि यह किसी प्रकार का मेनू दिखा रहा है (हो सकता है कि आपने जो उम्मीद की थी)। जब मेनू दूसरी बार छूता है, तो मुझे लगता है कि यह मेनू को खारिज कर देगा और यह वह समय हो सकता है जब AsyncTask निष्पादित किया गया है जिसके परिणामस्वरूप पहले मेनू में पहली बार अपेक्षित था। AsyncTask का दूसरा उदाहरण तब तक नहीं चलेगा जब तक कि पहले को समाप्त नहीं किया जाता है (जब तक निष्पादित करने के बजाय निष्पादित करने के लिए निष्पादक नहीं किया जाता है, लेकिन यह मामला नहीं है और न ही मुझे उम्मीद है कि यह अपेक्षित परिणाम में मदद करेगा।)

हो सकता है कि आप चाहें एक "डमी" मेनू तैयार किया गया है (हो सकता है कि कुछ "प्रतीक्षा ..." दिखाता हो) और पृष्ठभूमि थ्रेड शुरू करें जहां यह सही मेनू बनाता है और फिर जब यह तैयार हो और एक नया मेनू (प्रोग्रामेटिक रूप से) प्रदर्शित हो।

मैं व्यक्तिगत रूप से एक तरह से खोजने का निर्माण और (यूआई धागे पर मेनू दिखाने शायद मेनू तैयार के रूप में परिवर्तन किए जाएंगे, समय से आगे है, और जरूरत सिर्फ यह दिखाने के लिए सलाह देंगे।

Kaamel

+1

executeOnExecutor एप्लिकेशन नहीं करता है कोई फर्क नहीं पड़ता। – Venky

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