我有一个View,需要检测它何时被附加到其父视图。
在ViewGroup
我有OnHierarchyChangeListener
,它允许我知道何时添加/删除子视图,但我需要相反的事情。
答案 0 :(得分:16)
您可以在onAttachedToWindow
中创建自定义视图并执行操作public class CustomView extends View {
public CustomView(Context context) {
super(context);
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
Log.d("CustomView", "onAttachedToWindow called for " + getId());
Toast.makeText(getContext(), "added", 1000).show();
}
}
[编辑1]
您可以确保将自定义视图添加到您想要的正确视图组
@Override
protected void onAttachedToWindow() {
// TODO Auto-generated method stub
super.onAttachedToWindow();
if(((View)getParent()).getId()== R.id.relativelayout2)
{
Log.d("CustomView","onAttachedToWindow called for " + getId());
Toast.makeText(context, "added", 1000).show();
}
}
答案 1 :(得分:0)
嗯,你有OnHierarchyChangeListener中的视图,所以我想你可以为你的视图添加一个回调(通过用接口继承它们)并从OnHierarchyChangeListener中调用它。这样,您的视图将在调用OnHierarchyChangeListener的同时被调用。
但是,当发生这种情况时,我不会感到惊讶,您的视图的许多属性(如尺寸)可能尚未定义。
答案 2 :(得分:0)
我认为如果你需要那种控制,最好把它变成片段。这样您就可以访问更精细的生命周期。
答案 3 :(得分:0)
如果通过实现onViewAdded方法监视父级的附加视图,则可以以不同的角度查看此问题。
示例:
while
答案 4 :(得分:0)
无需创建自定义视图的解决方案
如果视图是您无法修改的视图,则可以在视图附加到视图层次结构以及从视图层次结构分离视图时使用View.addOnAttachStateChangeListener来获取钩子。
类似的东西:
科特林
view.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener {
override fun onViewAttachedToWindow(v: View) {
// Do stuff when view has been attached to window
}
override fun onViewDetachedFromWindow(v: View) {
// Do stuff when view has been detached from window
}
})
Java
view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
// Do stuff when view has been attached to window
}
@Override
public void onViewDetachedFromWindow(View v) {
// Do stuff when view has been detached from window
}
});