2013-07-06 47 views
0

我想訪問ListView中的一個ListItem,它如下所示。 很多人討論過類似的問題。但我嘗試過,並沒有工作。 我的代碼列在下面。如何訪問列表視圖中的ListItem

pos = 0;//position of ListItem 
for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) 
{ 
    if(tel.equals(cursor.getString(2))) 
     break; 
    pos++; 
} 
LayoutInflater mInflater = LayoutInflater.from(context); 
View myView = mInflater.inflate(R.layout.my_list_fragment, null); 
lvObjects = (ListView)myView.findViewById(android.R.id.list);    
View v = lvObjects.getChildAt(pos); 

我的問題是 (1)View v總是Null。 (2)getChildAt()只返回可見的View。如果我想訪問隱藏的View,如何實現?

+0

訪問隱藏物品的目的是什麼? – Blackbelt

+0

我的ListView有一個TextView,我需要在SMS更新時更新它。但目前的問題是即使在可見的視圖中,返回值爲空。 – batuman

回答

0

你根本不應該這樣做!ListView不呈現它不需要呈現的視圖,並且它重複使用已經創建的視圖對象。這是優化。

取而代之的是,提供Adapter的實現或擴展一個,覆蓋getView方法並操作由super.getView創建的視圖或由您的代碼創建的視圖。

如果ListView已經顯示了項目,您可以通過調用ListView.invalidateViews重新繪製項目。它會調用適配器來繪製視圖。

如果您使用的是BaseAdapter且底層已更改,請在適配器上調用notifyDataSetChanged

+0

如何實施它的任何示例。 – batuman

+0

是的,我使用ArrayAdapter。但是我在SMSReceiver中,如何從SMSReceiver類中調用notifyDataSetChanged。 – batuman

+0

假設它不是主線程,你應該使用'listView.post(new Runnable(){public void run(){adapter.notifyDataSetChanged();}});' –