अद्यतन: ऐसा लगता है कि कुछ यादृच्छिक समय पर ऐप का उपयोग करते समय, जब मैं लंबे समय तक क्लिक करता हूं, तो विशेष रूप से स्क्रीन के नीचे की ओर आइटम पर ऐप क्रैश हो जाएगा। ऐसा कोई विचार क्यों हो सकता है?एस्प्रेसो मेनू आइटम और पॉपअप मेनू पर लंबे समय तक क्लिक करें
तो मेरे ऐप में एक सूचीदृश्य है। यदि आप किसी सूचीदृश्य आइटम को लॉकक्लिक करते हैं, तो उस पॉपअप मेनू को उस ऑब्जेक्ट पर लगाया गया है जिसे आपने लॉन्च किया है, मेनू आइटम को हटाने या संपादित करने के विकल्पों के साथ दिखाई देता है। बस ऐप का उपयोग करके, सब कुछ ठीक काम करता है। आप सूची में किसी भी आइटम पर लंबे समय तक क्लिक कर सकते हैं, अंतर्निहित संबंधित डेटा हटा दिया गया है और सूची आइटम को उस आइटम के बिना रीफ्रेश किया गया है जिसे आपने अभी हटा दिया है।
मैं क्या कर रहा हूं: एस्प्रेसो को मेरी सूची दृश्य पसंद नहीं है और लंबे समय तक क्लिक करना पसंद नहीं है। मैं बस परीक्षण करने की कोशिश कर रहा हूं कि पॉपअप मेनू प्रकट होता है, लेकिन मैं एस्प्रेसो को सफलतापूर्वक लांगक्लिक तक भी नहीं प्राप्त कर सकता। मुझे लगता है कि इस मुद्दे को पॉपअप मेनू के साथ कुछ करना है। तो शुरुआत करने वालों के लिए, मैं बस परेशान होने के बिना एस्प्रेसो को लांगक्लिक करने की कोशिश कर रहा हूं। एक बार एस्प्रेसो लॉन्गक्लिक सफलतापूर्वक, मुझे लगता है कि मैं यह पता लगा सकता हूं कि पॉपअप प्रदर्शित होता है या नहीं।
मैंने अब तक क्या प्रयास किया है: मैंने पढ़ा है कि एनीमेशन को बंद करना एस्प्रेसो को कम फ्लैकी में मदद करने के लिए माना जाता है। मैंने उन सभी एनिमेशन को बंद कर दिया जो मैं कर सकता था और समस्या अभी भी बनी हुई है। मैं भी मेरे फोन पर परीक्षण रन घड़ी और देखें कि यह सही मेनू आइटम 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)
पॉपअप मेनू के लिए एंकर को परिभाषित करता है। शायद इसके साथ कोई समस्या है? लेकिन जैसा कि बताया गया है, सबकुछ खुद के साथ बातचीत करते समय अपेक्षित रूप से ठीक काम करता है।
किसी भी मार्गदर्शन की सराहना की जाएगी। यदि अब स्पष्टीकरण की आवश्यकता है तो कृपया मुझे बताएं।
इससे मदद मिल सकती है: http://stackoverflow.com/questions/24634136/menu-popup-helper-cannot-be-used-without-anchor –