2015-04-22 69 views
0

我有一個ListView從「rowlayout」獲取每個項目的佈局。Android - 如何獲取自定義佈局中的視圖引用?

我想在我的主要活動的rowlayout中按鈕之一做些什麼,我如何獲得對它的引用不起作用。

我想我基本上不了解如何在自定義佈局中獲取對視圖的引用的一般概念 - 除非從ListView獲取視圖是不同的。誰能幫忙?謝謝。

回答

1

ListViewViewGroup所以你可以遍歷它的孩子:

int n = getChildCount(); 
for (int i = 0; i < n; i++) { 
    doSomethingToView(getChildAt(i)); 
} 

但是,你一定要小心。 ListView是非常特殊的,只有你可能期望的子集。它只能保持(粗略)引用當前可見的孩子,並在他們消失時重新使用它們。

您可能會考慮更改底層適配器,而不是通知ListView其適配器已更改,因此需要重新繪製子級。或者,您可以讓ListView的孩子直接監聽應該改變它的事件,然後自行調整。

1

如果您正在膨脹在適配器中的getView方法中的自定義佈局,你可以得到這樣

LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

View rowView = inflater.inflate(R.layout.your_custom_layout, parent, false); 

TextView tv = (TextView) rowView.findViewById(R.id.your_tv_id); 
+0

上面的代碼可以從我的主要活動中調用,如果我的適配器類是單獨的嗎? – Isaac

+0

不,這是在適配器的getView方法中。編輯:對不起,只是重讀你的問題,沒有意識到你想在活動中訪問它。請不安 – jb15613

0

一個觀點,如果你在ViewHolder的方式實現ListView您可以使用partial refresh principle,就這樣:

private void refreshPartially(int position){ 
    int firstVisiblePosition = listview.getFirstVisiblePosition(); 
    int lastVisiblePosition = listview.getLastVisiblePosition(); 
    if(position>=firstVisiblePosition && position<=lastVisiblePosition){ 
     View view = listview.getChildAt(position - firstVisiblePosition); 
     if(view.getTag() instanceof ViewHolder){ 
      ViewHolder vh = (ViewHolder)view.getTag(); 
      //holder.play.setBackgroundResource(resId);//Do something here. 
      ... 
     } 
    } 
} 
相關問題