2016-05-04 10 views
12

मेरे पास एक सूची दृश्य है, जो डेटाबेस से डेटा दिखाता है।एस्प्रेसो। 'लोड एडाप्टर डेटा' करने में त्रुटि

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 पर मिल गया है, गूगल, 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 को कर्सर एडाप्टर द्वारा समर्थित किया जाता है, इसलिए कर्सरमैचर।

और उपयोग निम्नलिखित है:

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

यह काम करता है। धन्यवाद! – pligosv

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