2015-10-17 2 views
5

UPDATE: кажется, что при использовании приложения в какое-то случайное время приложение будет разбиваться, когда я нажимаю кнопку, особенно на элементах в нижней части экрана. Любые идеи о том, почему это может быть?эспрессо долго нажимает на пункт меню и всплывающее меню

Итак, в моем приложении есть список. Если вы долгое время просматриваете элемент списка, появляется всплывающее меню, привязанное к тому элементу, который вы давно вычеркнули, с параметрами для удаления или редактирования элемента меню. Просто используя приложение, все работает нормально. Вы можете долго щелкнуть любой элемент в списке, базовые связанные данные будут удалены, и список будет обновлен без этого элемента, который вы только что удалили.

То, что я пытаюсь сделать: Эспрессо не нравится мой просмотр списка и длинный щелчок. Я просто пытаюсь проверить, что всплывающее меню появляется, но я даже не могу получить эспрессо для долгого щелчка. Я думаю, что проблема имеет какое-то отношение к всплывающему меню. Поэтому для начинающих я просто пытаюсь заставить эспрессо долго болтать, не расстраиваясь. Как только espresso longclicks успешно, я думаю, что могу выяснить, как проверить, отображается ли всплывающее окно.

Что я пробовал до сих пор: Я читал, что отключение анимации должно помочь эспрессо быть менее шелушащимся. Я отключил все анимации, которые я смог, и проблема все еще сохраняется. Я могу даже смотреть на тестовый запуск на моем телефоне и посмотреть, что он 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 набор (это от курса CourseMenuFragment по линии 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())); 

мне пришлось корректировать индекс позиции для того, когда я прокрутила дальше в списке.Я как бы ненавижу отвечать на мои собственные вопросы, но, возможно, это поможет кому-то другому.

Смежные вопросы