2016-05-04 1 views
12

У меня есть ListView, который показывает данные из базы данных.Эспрессо. Ошибка при выполнении «данных адаптера нагрузки»

db = new DB(this); 
    db.open(); 


    String[] from = new String[]{DB.COLUMN_FIRSTNAME, DB.COLUMN_LASTNAME}; 
    int[] to = new int[]{android.R.id.text1, android.R.id.text2};   

    scAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_activated_2, null, from, to, 0); 
    lvData = (ListView) findViewById(R.id.lvData); 
    lvData.setAdapter(scAdapter); 

    lvData.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); 
    lvData.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { 

Он показывает имя и фамилию из базы данных в виде списка элементов: Click to UI

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

Когда я использую:

onData(anything()) 
    .inAdapterView(withId(R.id.lvData)) 
    .atPosition(3) 
    .perform(click()); 

Он отлично работает. Но я хочу щелкнуть элемент, содержащий текст соответствующего элемента.

То, что я пытался до сих пор (все, что я нашел на StackOverflow, Google, GitHub и т.д.):

onView(allOf(withText("Ivan Ivanov"))).perform(click()) 

onData(allOf(is(instanceOf(MainActivity.class)),is("Ivan Ivanov"))) 
      .inAdapterView(withId(R.id.lvData)) 
      .perform(click()); 

onData(hasToString(startsWith("v"))) 
      .inAdapterView(withId(R.id.lvData)) 
      .atPosition(0).perform(click()); 

onData(instanceOf(MainActivity.class)) 
      .inAdapterView(withId(R.id.lvData)) 
      .atPosition(0) 
      .check(matches(hasDescendant(withText("Ivan Ivanov")))); 

onData(anything()).inAdapterView(withContentDescription("Ivan Ivanov")) 
      .atPosition(0).perform(click()); 

Так, может быть, есть различия между строкой «Иван Иванов» и пункта , который содержит данные из базы данных: firstName + lastName?

ответ

5

Используйте CursorMatchers для соответствия элементам в вашем списке.

onData() работает с данными в вашем адаптере, а не фактическим видом. В вашем случае ListView поддерживается CursorAdapter, поэтому CursorMatcher.

И использование заключается в следующем:

onData(withRowString(DB.COLUMN_FIRSTNAME, "Ivan")).perform(click()); 
+0

Он работает. Благодаря! – pligosv

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

  • Нет связанных вопросов^_^