让我们说我有两种不同类型的RelativeLayouts。也就是说这两个RelativeLayouts不同,因为它们包含不同的视图。一个可能有文本视图,图像视图等,另一个可能也有一些文本视图,这意味着与另一个relativelayout中的另一组文本视图完全不同。但是让我们说它们都有一个提交按钮。所以,为了使我的观点更清楚,这里有一些代码:
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ViewParent parent = v.getParent();
if(parent instanceof CustomRelativeLayout){
CustomRelativeLayout aRelativeLayout = (CustomRelativeLayout)parent;
for(int childrenIndex = 0; childrenIndex < r.getChildCount(); childrenIndex++){
View childView = aRelativeLayout.getChildAt(childrenIndex);
}
}
}
这里的问题是我们不知道哪个CustomRelativeLayout是aRelativeLayout所指的。具体取决于我将要搜索哪些特定的childView以及我实现的与这些视图相关的逻辑,具体取决于哪个CustomRelativeLayout。我希望能够有一个switch语句来检查哪种类型的CustomRelativeLayout是父类。
所以我想问的问题是:
如何获取有关哪个CustomRelativeLayout实例引用所点击按钮的更多信息?有没有办法获取实例变量名称?
一旦我发现了这些信息,我如何获得有关我正在处理的父视图子项的具体信息?我的想法是,我可能在父母中有30个子视图,但我只对一个特定视图感兴趣(我可能想以一个特定文本视图的文本为例)。我会知道特别寻找它,因为我会在我的CustomRelativeLayouts的不同实例(第一个问题)上做一个switch语句,因此我知道我想看哪个视图,要执行哪个逻辑或者我有什么其他方法需要打电话。
感谢任何想法或帮助。
答案 0 :(得分:2)
对于您的第一个问题,有几个选项:
OnClickListener
s。然后,每个按钮只会触发自己的监听器onClick()
方法。android:id
属性)或代码(通过setId(int id)
)中为每个按钮指定不同的ID。然后在onClick()
中,您可以检查作为参数传递的View的ID。关于你的第二个问题:
由于您拥有父ViewGroup,因此可以使用以下命令查找其中的特定视图:
TextView interestingView = (TextView) parent.findViewById(R.id.interesting);
这只会搜索父视图的子项。
如果你需要获得未知数量的观点,那么最好的策略可能就像你现在一样迭代它们。您可以通过以XML(android:tag
)或代码(setTag(Object tag)
设置标记来标识视图组,并在迭代时检查它们。例如,如果您有一组TextView
s并且在每一个都是颜色或动物,你可能会这样处理:
// defined elsewhere
private static final String TAG_COLOR = "color";
private static final String TAG_ANIMAL = "animal";
...
int count = parent.getChildCount();
for (int i = 0; i < count; i++){
View view = parent.getChildAt(i);
if (TAG_COLOR.equals(view.getTag()) {
// handle color
} else if (TAG_ANIMAL.equals(view.getTag()) {
// handle animal
}
}
答案 1 :(得分:0)
有几种方法可以做到这一点。
使用“id”标识视图。您可以为不同的视图提供不同的ID,然后就可以识别它们。有关详细信息,请参阅http://developer.android.com/reference/android/view/View.html#getId()(View.getId()的API文档)。
使用不同的标记标记每个视图,并通过标记识别它们。有关详细信息,请参阅http://developer.android.com/reference/android/view/View.html#getTag()(View.getTag()的API文档)。
如果您想要自定义更多内容,只需继承默认的Android视图,并使用“instanceof”来识别它们。