2015-10-17 4 views
5

अद्यतन: ऐसा लगता है कि कुछ यादृच्छिक समय पर ऐप का उपयोग करते समय, जब मैं लंबे समय तक क्लिक करता हूं, तो विशेष रूप से स्क्रीन के नीचे की ओर आइटम पर ऐप क्रैश हो जाएगा। ऐसा कोई विचार क्यों हो सकता है?एस्प्रेसो मेनू आइटम और पॉपअप मेनू पर लंबे समय तक क्लिक करें

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

मैं क्या कर रहा हूं: एस्प्रेसो को मेरी सूची दृश्य पसंद नहीं है और लंबे समय तक क्लिक करना पसंद नहीं है। मैं बस परीक्षण करने की कोशिश कर रहा हूं कि पॉपअप मेनू प्रकट होता है, लेकिन मैं एस्प्रेसो को सफलतापूर्वक लांगक्लिक तक भी नहीं प्राप्त कर सकता। मुझे लगता है कि इस मुद्दे को पॉपअप मेनू के साथ कुछ करना है। तो शुरुआत करने वालों के लिए, मैं बस परेशान होने के बिना एस्प्रेसो को लांगक्लिक करने की कोशिश कर रहा हूं। एक बार एस्प्रेसो लॉन्गक्लिक सफलतापूर्वक, मुझे लगता है कि मैं यह पता लगा सकता हूं कि पॉपअप प्रदर्शित होता है या नहीं।

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

कोड: यह एस्प्रेसो परीक्षा है लाइन जो विफल रहता है। मैंने click() को छोड़कर कोड की एक ही पंक्ति का उपयोग किया है और ऐप करता है जो इसे माना जाता है और एस्प्रेसो खुश है। mCourseCount बस सूची में अंतिम आइटम का सूचकांक है। यह मुद्दा नहीं है। मैं और कई अन्य परीक्षणों में एक ही सूचकांक अद्यतन करता हूं और सभी ठीक काम करता है।

onData(anything()).inAdapterView(withId(R.id.listview_class))  
     .atPosition(mCourseCount).perform(longClick()); 

विफलता पर, वहाँ एक जोड़े दिलचस्प लाइनों स्टैक ट्रेस में

android.support.test.espresso.PerformException: Error performing 'long 
click' on view ' displaying data matching: ANYTHING within adapter vieW 
matching: with id: com.cmsc355.classcompass.classcompass:id/listview_class' 

और बाद में

Caused by: java.lang.IllegalStateException: MenuPopupHelper cannot be used 
without an anchor at 
com.android.internal.view.menu.MenuPopupHelper.show(MenuPopupHelper.java:101) 
at android.widget.PopupMenu.show(PopupMenu.java:108)at 
com.cmsc355.classcompass.classcompass.CourseMenuFragment$2. 
onItemLongClick(CourseMenuFragment.java:91) 

पर मौजूद स्टैक ट्रेस का यह आखिरी बिट भ्रामक है क्योंकि मैं defintely सेट निम्नानुसार एक एंकर के साथ पॉपअप मेनू ऊपर (यह लाइन 91 के आसपास कोर्समेनूफ्रैगमेंट से है):

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, final View view, final int position, long id) { 

     PopupMenu popupEdit = new PopupMenu(getActivity(), listView.getChildAt(position)); 
     popupEdit.getMenuInflater().inflate(R.menu.course_longclick_popup, popupEdit.getMenu()); 
     popupEdit.show(); 

     popupEdit.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
      @Override 
      public boolean onMenuItemClick(MenuItem item) { 

      if (item.getItemId() == R.id.edit_course) { 

      } else if (item.getItemId() == R.id.delete_course) { 
       throwCourseDeleteAlert(position); 
       listView.setAdapter(mCourseNameAdapter); 
      } 
      return true; 
      } 
     }); 
     return true; 
     } 
    }); 

जिस लाइन में पॉपअप पहली बार तत्काल है, listView.getChildAt(position) पॉपअप मेनू के लिए एंकर को परिभाषित करता है। शायद इसके साथ कोई समस्या है? लेकिन जैसा कि बताया गया है, सबकुछ खुद के साथ बातचीत करते समय अपेक्षित रूप से ठीक काम करता है।

किसी भी मार्गदर्शन की सराहना की जाएगी। यदि अब स्पष्टीकरण की आवश्यकता है तो कृपया मुझे बताएं।

+0

इससे मदद मिल सकती है: http://stackoverflow.com/questions/24634136/menu-popup-helper-cannot-be-used-without-anchor –

उत्तर

3

मिला समाधान। मैं सूची आइटम को गलत तरीके से एक्सेस कर रहा था।

PopupMenu popupEdit = new PopupMenu(getActivity(), listView.getChildAt(position)); 

के बजाय मैं

PopupMenu popupEdit = new PopupMenu(getActivity(), listView.getChildAt(position - listView.getFirstVisiblePosition())); 

मैं जब मैं सूची में आगे नीचे स्क्रॉल किया गया था के लिए स्थिति के सूचकांक को समायोजित करने के लिए किया था के लिए बदल दिया है।मैं घृणा करता हूं कि एसओ पर अपने प्रश्नों का उत्तर दें, लेकिन शायद यह किसी और की मदद करेगा।

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