2017-06-02 72 views
0

我試圖點擊我的數組列表的第一個項目幾個小時,我已經閱讀了很多關於Stack Overflow的問題,教程和我試圖實現的他們在許多方面,但它不起作用。如何通過Espresso執行ArrayList中的第一項的點擊

clickView(getSearchActivity().hintListView); 

onData(anything()) 
    .onChildView(withId(R.id.hintLayout)) 
    .atPosition(0) 
    .perform(click()); 

onData(allOf(is(instanceOf(String.class)))) 
    .atPosition(0) 
    .perform(click()); 

onData(instanceOf(ArrayList.class)) 
    .atPosition(0) 
    .perform(click()); 

onData(instanceOf(String.class)) 
    .atPosition(0) 
    .perform(click()); 

onData(anything()) 
    .inAdapterView(withId(R.id.hintLayout)) 
    .atPosition(0) 
    .perform(click()); 

onData(anything()) 
    .inAdapterView(allOf(withId(R.id.hintLayout), isCompletelyDisplayed())) 
    .atPosition(0).perform(click()); 

我必須點擊ListView中的第一項,即採取的ArrayList ID這ListView控件的是hintLayout。

有誰知道這是什麼問題?它在哪裏?

+0

你使用'ListView'或'RecyclerView'嗎? –

+0

我使用的ListView –

+0

當我必須單擊微調項是足夠使用: '昂達(}這種(String.class)) .atPosition(1).perform(點擊());現在' 我有很大的困難 –

回答

0

A ListView必須填充適配器。適配器完成後只需將其添加到您的ListView這樣的:

private void setListAdapter(ListDataAdapter adapter){ 
    lvYourListView.setAdapter(adapter); 
} 

爲了取回數據出來就OnClick事件中,你需要這樣的事情在你onCreate()方法:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

lvYourListView = (ListView) findViewById(R.id.lvListview); 
     lvYourListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       ListData data = new ListData(); 

       data = (ListData)parent.getItemAtPosition(position); 

       doSomethingWithData(data); 

      } 
     }); 

如果您需要適配器的幫助 - 請告訴我。爲了做到這一點,我需要查看更多的代碼。