获取与当前视图共享父级的其他子视图

20
我正在创建一个表格,其中每一行都包含文本和一个按钮。现在,当按下该按钮时,我想调用使用按钮旁边文本值的事件。如何访问该TextView的内容?我可以获取我的按钮的ViewParent,应该是该行,但没有方法可以访问该视图的子元素。
private OnClickListener updateButtonListener = new OnClickListener(){
     public void onClick(View v) {
         ViewParent parent = v.getParent();
         //Here I would like to get the first child of that ViewParent
      }
};
2个回答

66

如果您可以获得一个 ViewParent,那么您可以将其强制转换为 ViewGroup 并获取所需的 View。您的代码将如下所示:

TextView textView = null;
ViewGroup row = (ViewGroup) v.getParent();
for (int itemPos = 0; itemPos < row.getChildCount(); itemPos++) {
    View view = row.getChildAt(itemPos);
    if (view instanceof TextView) {
         textView = (TextView) view; //Found it!
         break;
    }
}

假设你的行中只有一个TextView,那就是这样。


@Malcolm 很好的回答。但是如果有多个textView,那么如何选择特定的textView呢? - MDMalik
3
通过使用id或标签。在同一视图组中的文本视图应该使用不同的标签,当你找到一个文本视图时,获取它的标签并查看是否为所需的视图。 - Malcolm

15

如果您知道子元素的ID,则可以执行以下操作:

ViewGroup row = (ViewGroup) v.getParent();
TextView textView = (TextView) row.findViewById(R.id.childID);  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接