2010-01-04 129 views
33

我使用SimpleAdapter創建了Android ListView,該項目中的項目多於屏幕中的項目。列表滾動後,我需要獲取列表中第一個可見項目的數據模型中的位置。Android ListView:獲取可見項目的數據索引

基本上我想要一個功能,如:listView.getChildAt(0).getPositionInDataModel()

Adapter有一些功能,如getItemId(position)看起來很有用;然而,SimpleAdapter實現只是返回傳入的位置,而不是像我希望的行ID。

蠻力的解決方案是獲取索引0處的視圖,並將其與適配器中每個項目的視圖進行比較。但是,從適配器獲取特定位置的視圖似乎並不容易。

任何人有任何想法?

回答

90

這很容易。只需使用ListView.getFirstVisiblePosition() + indexYouWant即可。例如,要獲取ListView中顯示的第二個孩子的適配器中的位置,只需使用getFirstVisiblePosition() + 1即可。

無需在答覆中顯示的所有可怕的東西上面:)

+2

哇,我不能相信我錯過了。我正在尋找一個這樣的功能。一定是因爲它是在我沒有料到的父類中定義的。仍然習慣了這種javadoc風格... 感謝您指出! – 2010-01-04 21:49:55

+0

@RomainGuy,您保存了我的ListView性能... – 2014-01-28 09:30:48

+0

getFirstVisiblePosition()和getLastVisiblePosition()之間的某些視圖在我的Gridview中返回null。我正在回收視圖 - 是原因嗎?我希望可見的視圖保證不爲空,特別是因爲我可以直觀地看到它們不是。 – Laurent 2015-02-27 08:49:39

1
listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
{ 
    public void onItemSelected(AdapterView<?> parent,View view, int pos, long id) 
    { 
     AisleId= parent.getSelectedItemId(); 
    } 
    @Override 
    public void onNothingSelected(AdapterView<?> arg0) { 
     // TODO Auto-generated method stub 
    } 
}); 

在此,我們將獲取列表項ID parent.getSelectedItemId();

-1

只需使用getPositionForView(View)see documentation)。這種方法的主要優點是它也適用於項目的後裔View

+1

爲什麼這是低調?它不工作嗎? – 2015-02-26 12:58:56

+0

它只是不回答這個問題 – 2016-02-10 18:38:35