2015-04-22 72 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. 
      ... 
     } 
    } 
} 
相关问题