親ビューにアタッチしているときに検出する必要のあるビューがあります。ビューは親に接続されているときにどのように検出できますか?
ViewGroup
私はOnHierarchyChangeListener
を持っています。子ビューが追加/削除されたときを私に知らせることができますが、逆のことが必要です。
親ビューにアタッチしているときに検出する必要のあるビューがあります。ビューは親に接続されているときにどのように検出できますか?
ViewGroup
私はOnHierarchyChangeListener
を持っています。子ビューが追加/削除されたときを私に知らせることができますが、逆のことが必要です。
あなたはカスタムビューを作成し、その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();
}
}
しかし、ビューは作成時に親ビューに追加されません!このビューを引数として渡して、いくつかのビューグループでaddViewが呼び出されたときを知りたい。 – user940016
申し訳ありません、あなたは正しいです、plsは、編集された答えを見てください。 – Talha
上記の私のコメントをご覧ください。私はonAttachedToWindowが私の問題の正しい解決策であるかどうかはわかりません。 – user940016
あなたはOnHierarchyChangeListenerでビューを持っているので、(インターフェイスでそれらをサブクラス化することによって)ビューにコールバックを追加してf rom OnHierarchyChangeListener。このようにして、OnHierarchyChangeListenerが呼び出されるのと同時にビューが呼び出されます。
ただし、このような状況が発生した場合でも、寸法などのビューの多くのプロパティはまだ定義されていない可能性があります。
を見ることができますが、それはその機能をサポートする親に限定されています。 – user940016
もちろん、それは親のための自動プロセスではありません。 – SylvainL
私はあなたがそのような種類のコントロールを必要としたら、それを断片にするのが最善だろうと思います。そうすれば、よりきめ細かなライフサイクルにアクセスすることができます。
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;
}
}
私はそれが私が読んちょうど[onAttachedToWindow](http://developer.android.com/reference/android/view/View.html#onAttachedToWindow()) – Blundell
だと思いましたしかし、それは私が必要とするものと全く同じようには見えません。私が理解しているところでは、ビューが描画しようとしているときにのみ呼び出されますが、親に追加された時点を知る必要があります。また、ビューが削除されて別の親に追加された場合、この関数の動作についてはわかりません。それは再び呼び出されるのですか? – user940016
onDetachが呼び出され、次にonAttachが呼び出され、オーバーライドして自分自身でログを追加して見つけてください – Blundell