UPDATE: es scheint, dass wenn die App nur zu einigen zufälligen Zeiten, die App wird abstürzen, wenn ich lange klicke, vor allem auf Elemente auf der Unterseite des Bildschirms. Irgendwelche Ideen, warum das sein könnte?espresso lange klick auf menü item und popup menü
So gibt es eine Listenansicht in meiner App. Wenn Sie auf ein Listenansichtselement klicken, wird ein Popup-Menü angezeigt, das mit dem Objekt verknüpft ist, auf das Sie lange geklickt haben. Es enthält Optionen zum Löschen oder Bearbeiten des Menüelements. Mit der App funktioniert alles gut. Sie können auf ein beliebiges Element in der Liste klicken, die zugrunde liegenden verknüpften Daten werden gelöscht und die Listenansicht wird ohne das Element aktualisiert, das Sie gerade gelöscht haben.
Was ich versuche zu tun: Espresso mag nicht meine Listenansicht und langes Klicken obwohl. Ich versuche nur zu testen, dass das Popup-Menü erscheint, aber ich kann nicht einmal Espresso erfolgreich mit einem langen Klick starten. Ich denke, das Problem hat etwas mit dem Popup-Menü zu tun. Also für den Anfang versuche ich nur, Espresso zum Longclick zu bekommen, ohne sich über mich zu ärgern. Sobald Espresso-Longclicks erfolgreich sind, denke ich, kann ich herausfinden, ob das Popup angezeigt wird oder nicht.
Was ich bis jetzt versucht habe: Ich habe gelesen, dass das Ausschalten von Animationen soll Espresso weniger flockig sein. Ich habe alle Animationen ausgeschaltet und das Problem besteht immer noch. Ich kann sogar den Testlauf auf meinem Handy beobachten und sehen, dass es den richtigen Menüpunkt ist longclicking, aber wenn die longclick abgeschlossen ist und das Popup-Menü angezeigt werden soll, schlägt der Test fehl
Code: Dies ist Espresso-Test Zeile, die fehlschlägt. Ich habe die gleiche Codezeile zuvor verwendet, außer mit click()
und die App macht was es soll und Espresso ist glücklich. mCourseCount ist einfach der Index des letzten Eintrags in der Liste. Das ist nicht das Problem. Ich und aktualisieren Sie den gleichen Index in mehreren anderen Tests und alles funktioniert gut.
onData(anything()).inAdapterView(withId(R.id.listview_class))
.atPosition(mCourseCount).perform(longClick());
Bei einem Ausfall, gibt es ein paar interessanten Zeilen in dem Stack-Trace
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'
und später
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)
Das letzte Bit der Stack-Trace verwirrend ist, weil ich auf jeden Fall eingestellt Führen Sie das Popup-Menü mit einem Anker wie folgt (dies ist von CourseMenuFragment um Linie 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;
}
});
In der Zeile, in der das Popup zuerst instanziiert wird, definieren listView.getChildAt(position)
den Anker für das Popup-Menü. Vielleicht gibt es ein Problem damit? Aber wie gesagt, alles funktioniert wie erwartet, wenn ich nur mit mir selbst interagiere.
Jede Anleitung wäre willkommen. Bitte lassen Sie mich wissen, wenn weitere Klärung erforderlich ist.
das könnte helfen: http://StackOverflow.com/Questions/24634136/menu-popup-helper-cannot-be-verwendet-ohne-anchor –