2012-12-28 15 views
13

親ビューにアタッチしているときに検出する必要のあるビューがあります。ビューは親に接続されているときにどのように検出できますか?

ViewGroup私はOnHierarchyChangeListenerを持っています。子ビューが追加/削除されたときを私に知らせることができますが、逆のことが必要です。

+0

私はそれが私が読んちょうど[onAttachedToWindow](http://developer.android.com/reference/android/view/View.html#onAttachedToWindow()) – Blundell

+0

だと思いましたしかし、それは私が必要とするものと全く同じようには見えません。私が理解しているところでは、ビューが描画しようとしているときにのみ呼び出されますが、親に追加された時点を知る必要があります。また、ビューが削除されて別の親に追加された場合、この関数の動作についてはわかりません。それは再び呼び出されるのですか? – user940016

+0

onDetachが呼び出され、次にonAttachが呼び出され、オーバーライドして自分自身でログを追加して見つけてください – Blundell

答えて

15

あなたはカスタムビューを作成し、その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(); 
    } 
} 

に自分のものを行うことができます[EDIT 1]

あなたのCustomViewはあなたが

@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();   
    } 

} 
+0

しかし、ビューは作成時に親ビューに追加されません!このビューを引数として渡して、いくつかのビューグループでaddViewが呼び出されたときを知りたい。 – user940016

+0

申し訳ありません、あなたは正しいです、plsは、編集された答えを見てください。 – Talha

+0

上記の私のコメントをご覧ください。私はonAttachedToWindowが私の問題の正しい解決策であるかどうかはわかりません。 – user940016

0
を望んでいるのViewGroup修正するために追加されたことを保証することができます

あなたはOnHierarchyChangeListenerでビューを持っているので、(インターフェイスでそれらをサブクラス化することによって)ビューにコールバックを追加してf rom OnHierarchyChangeListener。このようにして、OnHierarchyChangeListenerが呼び出されるのと同時にビューが呼び出されます。

ただし、このような状況が発生した場合でも、寸法などのビューの多くのプロパティはまだ定義されていない可能性があります。

+0

を見ることができますが、それはその機能をサポートする親に限定されています。 – user940016

+0

もちろん、それは親のための自動プロセスではありません。 – SylvainL

0

私はあなたがそのような種類のコントロールを必要としたら、それを断片にするのが最善だろうと思います。そうすれば、よりきめ細かなライフサイクルにアクセスすることができます。

0

onViewAddedメソッドを実装して、添付ビューの親を監視する場合、この問題を別の角度で見ることができます。

例:

public class LayoutInvokeChildAdded extends RelativeLayout { 

    private OnDoneListener onDoneListener; 

    public LayoutInvokeChildAdded(Context context) { 
     super(context); 
    } 

    public LayoutInvokeChildAdded(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public LayoutInvokeChildAdded(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    @Override 
    public void onViewAdded(View child) { 
     super.onViewAdded(child); 
     if (onDoneListener != null) 
      onDoneListener.onDone(childe); 
    } 

    public void setOnDoneListener(OnDoneListener onDoneListener) { 
     this.onDoneListener = onDoneListener; 
    } 
} 
関連する問題