2010-09-30 75 views
0

我希望能夠進入我的ArrayAdapter的觀點:如何在ArrayAdapter中一次更新一個視圖?

public View getView(int position, View convertView, ViewGroup parent) 

我不知道我怎麼可以訪問此:

View myView = myArrayAdapter.getView(myPosition, myView, ?); 

我不知道我怎麼能得到的ViewGroup父?

回答

0

更新:

嘗試增加一個字段到在保持背景資源/顏色返回視圖時要使用的數據集的數據,並且在getView做

holder.background = dataSet.get(position).getBackground() 

如果你不知道我在談論這個事情持有人,檢查How to load the Listview "smoothly" in android

老:

我想說ListView包含的適配器是父ViewGroup。

無論如何,爲什麼不使用包含ArrayAdapter的ListView? ListView是視圖的容器,而不是適配器,它只保存數據集合,並在ListView要求它們時(f.e,滾動時)按需創建並返回視圖。即使您能夠獲取位置X的視圖,我也會說這不起作用,因爲您作爲參數傳遞的convertView不是ListView持有所示的那個。

考慮到在一個ListView中,在任何給定的時刻最多隻有7-8個視圖(我不知道確切的數字),而ListView所做的是通過調用適配器的getview來填充它們

這就是說,要更新單行(單個視圖),您需要更新適配器的數據收集。然後,推測,試圖從ListView中獲取該視圖並使其無效,但我懷疑這會起作用。

我認爲這些概念是正確的,如果他們錯了我會很感激,如果有人糾正我。

爲什麼要一次只更新一個視圖?

+0

我要讓行選擇看上去粘粘的,所以我想更改選定視圖的背景。 – 2010-09-30 09:07:39

+0

我已經更新了答案。此外,在您的方案中遵循的規則是更新整個ListView,而不是一行。 – Maragues 2010-09-30 09:16:38

1

嘛,據我瞭解,你不認爲在一般Adapter作爲源的AdapterView所以getView合同情況如下:
params中:inPositionconvertView,viewParent
結果:查看女巫會顯示在位置inPosition上,如果數據不爲空,則可以使用convertView綁定數據,返回的視圖將附加到viewParent

所以,如果你想獲得視圖,將通過在特定位置適配器視圖中顯示,爲什麼不只是調用

AdapterView<?> adapterView = getAdapterView(); 
View myView = adapterView.getChildAt(position); 

如果你想改變顯示你應該使用特定位置圖方式

Adapter myAdapter = getAdapter(); 
//change data inside adapter 
myAdapter.notifyDataSetChanged(); 
相關問題