2014-02-25 44 views
0

可見我想從ListView中獲取子視圖,然而,該方法等待,直到視圖是活動

listview.getChildAt(pos)返回null如果視圖是不實際顯示在屏幕上。在

protected void onCreate(Bundle saved)的尾部調用該方法也返回null,因爲似乎膨脹視圖的後臺進程仍在後臺運行。在致電getchildAt(pos)之前,我如何檢查視圖是否在屏幕上可見。我曾嘗試使用30ms的計時器,並且當時確實返回了正確的對象,但我不想使用硬編碼到應用程序中的值。

編輯代碼:

我試圖動態修改個別項目的背景顏色:

View view = list.getChildAt(list.getFirstVisiblePosition()); 

View.setBackgroundColor(getResources().getColor(android.R.color.holo_blue_bright)); 
+0

代碼?你可能需要將你的調用移動到onResume()方法 – Booger

+2

只是爲了清楚你想完成什麼:我假設你想改變'ListView'項目視圖。您應該更好地修改'ListView'後面的適配器,以便進行任何更改。這比從外部嘗試做得更可靠。也許你可以告訴我們更多你想要完成的事情。 – tiguchi

+0

我已經添加了代碼。將它添加到onResume()不起作用。我想爲列表視圖中的每個項目設置不同的顏色,因此我使用list.getChildAt()方法,並將通過循環運行以設置顏色。 – iamseiko

回答

3

我試圖修改個別項目 動態

的背景顏色

在ListView中完成此操作的最簡單方法可能是通過擴展/自定義適配器。

例如:

list.setAdapter = new ArrayAdapter(/* do here all initialisation of the adapter */){ 

    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = super.getView(position, convertView, parent); 
     v.setBackgroundColor(/* your color goes here */); 
    } 
} 

當然你可以使用任何類型的適配器,包括如果這是你自己的CustomAdapter,只是擺在那裏。

+0

謝謝!完美工作! – iamseiko