2016-10-21 2 views
3

私は、カスタムViewGroupを書くと次のような問題に出くわした:XMLからのすべての子ビューがViewGroupに追加された後のコールバック?

ViewGroupはXMLでプロパティを指定することで使用可能にする必要があります。 しかし、ViewGroupが作成され、そのすべての子のViewがXMLから追加された後に(つまり、インフレーターがViewGroupのすべての子をXMLに指定したViewを追加した後で、コード内で内部初期化を行いたいとします。 )。

私がこれに関連しているのは、getViewTreeObserver().addOnGlobalLayoutListener(...)を使用するための推奨事項です。 しかし、これは少なくとも子どものたびに呼び出されます。Viewが追加されました。また、アプリなどを再開した後にも呼び出されるため、すべての子供Viewが追加された瞬間を検出することさえできません。

ViewGroupにすべての子Viewが追加された後に呼び出されるメソッドはありますか?

関連:When are child views added to Layout/ViewGroup from XML

答えて

6

コールバックがあります:View.onFinishInflate()。 (また、すべてのコールバックを記述した「カスタムビューを実装」のセクションを持っている)documentationから :

ファイナライズXMLからの眺めを膨張させます。これは、すべての子ビューが追加された後、最後のフェーズ のインフレ、と呼ばれます。

単にあなたのカスタムViewGroupでメソッドをオーバーライド:

public class MyViewGroup extends ViewGroup { 

    @Override 
    protected void onFinishInflate() { 
     super.onFinishInflate(); 
     doMyInitialization(); 
    } 
}