我有一个复杂的布局,我在这个视图的SwitchLayout上添加了一个标签。
此视图中有一个ImageButton。 这是这个按钮的一个小地图:
LinearLayout - > SwitchLayout - > RelativeLayout - > RelativeLayout - >的ImageButton
在某些时候,我想将标签附加到SwitchLayout,但我所拥有的只是对ImageButton的引用。
我试图寻找一个ID,但似乎android只是向下搜索,所以
imageButton.findViewById(R.id.switchLayout);
不起作用。
看起来我也无法直接从ImageButton获取指定的标签。
此代码:
imageButton.getTag()
返回null
我找到的唯一一种解决方法是在这里,但它很难看:
ViewSwitcher viewSwitcher = (ViewSwitcher)imageButton.getParent().getParent().getParent();
viewSwitcher.getTag();
我想尽可能一周地进行耦合,所以我想知道是否有一种方法可以将标签分配给viewSwitcher及其所有子节点,
在父视图中查找FindViewById。
答案 0 :(得分:1)
声明并定义对swtichlayout的引用并直接获取标记。为什么你想使用imagebutton获取switchlayout的标签。
答案 1 :(得分:0)
android中的所有视图(控件)都是View
类型,因此您可以使用getId()
来查找ID。
您可以使用以下代码段
int parentId = ((View) arg0.getParent()).getId();
答案 2 :(得分:0)
Kotlin扩展功能版本的接受答案:
fun View.findParentById(@IdRes id: Int): ViewGroup? {
if (this.id == id) return this as? ViewGroup
return (parent as? View)?.findParentById(id)
}
答案 3 :(得分:0)
我在应用程序中使用以下Kotlin代码:
import android.view.View
import androidx.annotation.IdRes
fun <T : View> View.findParentViewById(@IdRes viewId: Int): T? {
@Suppress("UNCHECKED_CAST")
return when (this.id) {
viewId -> this as? T
else -> (parent as? View)?.findParentViewById<T>(viewId)
}
}