2011-12-20 41 views
1

我試過以下,但沒有運氣,因爲getChildAt總是返回null(我相信listView被填充)。如何模擬ListView中第一項(或任何位置)的選擇?

listView.performItemClick(listView.getChildAt(0), 0, listView.getChildAt(0).getId()); 

有什麼建議嗎?謝謝!

編輯:添加項目到列表

  lvAdapter = new ActionStreamAdapter<HasDescription>(getBaseContext()); 
      while ((item = actionStreamQueue.poll()) != null) { 
      ... 
       lvAdapter.addItem(item); 
      } 
      ListView.setAdapter(lvAdapter); 

ActionStreamAdapter是一類代碼擴展BaseAdapter。通過調用簡單數據穩健類的Dao來填充隊列。

+0

你什麼時候嘗試這樣做?很可能您的ListView尚未呈現,因此它沒有孩子。如果你想在onCreate或onResume中運行這個,情況就是這樣。 – dmon 2011-12-20 20:19:48

+0

不,我不這樣做,因爲我已經提到過.. ListView是肯定的。根據Jordi的getChildAt沒有做我想要的東西 – Han 2011-12-20 20:54:52

回答

1

孩子和物品之間是有區別的。子視圖在視圖層次結構中較低。例如,當存在包含兩個TextView的LinearLayout時,則TextView是LinearLayout的子項。 ListView包含項目。這些與您的ListView在同一個層次上,因此它們不是兒童。它們是ListView的項目。你應該使用ListView.getItemAtPosition()來代替。

然後,選擇和點擊是有區別的。點擊意味着對某個項目執行操作並進行選擇,以突出顯示該項目。爲了選擇第一個項目,你應該這樣做:ListView.getItemAtPosition(n).requestFocus()

+0

感謝您告訴差異!實際上,在我嘗試getChild方法之前,我嘗試了getItemAtPosition,但它似乎返回一個Object而不是View(並且不能被轉換爲一個)。任何想法? – Han 2011-12-20 17:06:03

+0

返回的對象的類型取決於用於將列表綁定到數據的適配器。如果您提供填充列表的代碼,我可以給你一個關於如何使這項工作的代碼示例。 – Jordi 2011-12-20 17:14:20

+0

已編輯。所以得到的項目返回的類是存儲幾個字符串和long的簡單對象 – Han 2011-12-20 17:36:36

0

它是一個有趣的API,它需要viewitem的指針,通常listview項目被回收,所以項目在位置0,不必是適配器上的第0項。您可以使用findViewWithTagTraversal()來查找視圖並對其進行選擇。

如果你不介意你想做什麼選擇,或者你想專注於第一項?

你可以使用setSelection()

+0

我實際上想要選擇默認情況下的第一個項目,並突出顯示它..現在我完成了部分,當我點擊一個項目時,它突出顯示和細節將顯示在活動的右側(類似於平板電腦中的Gmail應用)。 – Han 2011-12-20 17:20:28

+0

setSelection是做你想做的嗎? – 2011-12-20 17:29:41

+0

不是真的.. setSelection滾動列表以將特定項目置於頂部(我不希望這樣),但不會突出顯示任何內容。看起來它只是獲得焦點或 – Han 2011-12-20 18:05:03

相關問題