2013-05-08 6 views
9

私はアンドロイドでカスタムビューを作成しました。このビューの可視性が変更されたときに処理を行う必要があります。ビュー/ウィジェットの可視性が変更されたときに呼び出されるリスナーがありますか?カスタムのAndroidビュー/ウィジェットの可視性の変更を処理する方法

編集:

私は可視性を変更する方法を知って、私たちはビューにsetVisibilityたときに呼び出されるリスナーがあるかどうかを知りたいと思います!

+0

はもう少し説明し、私は可視性を変更する方法を知ってください – cgalvao1993

答えて

16

カスタムビュークラス内でその処理を行いますか? もしそうなら、setVisibility()メソッドをオーバーライドしてsuper()を呼び出し、カスタム処理を行うのはなぜですか?

+0

このソリューションはブラックベルトの詳細説明の前に提供されていたので、これを回答としてマークします – JeeZ

+2

この方法では機能しません。たとえば、ビューの親を不可視に設定した場合、そのビューの可視性プロパティは引き続き表示されます。ちょうどこれを練習すれば、それは本当であることがわかります。 – Jacky

0

ウィジェットの表示を変更するには、widget.setVisibility(View.Visible)またはwidget.setVisibility(View.Invisible)のメソッドを使用します。

+0

は、我々はビューにsetVisibilityたときに呼び出されるリスナーがあるかどうかを知りたいと思います! – JeeZ

15

私は可視性を変更する方法を知っているが、我々はビューにsetVisibilityときに呼び出される リスナーがあるかどうかを知りたいと思います!

あなたview/widgetをサブクラス化し、setVisibilityをオーバーライドして、あなたが通知をreciveするインターフェイスを登録する必要があります。たとえば:

public class MyView extends View { 

    public interface MyListener { 
    public void onSetVisibilityCalled(); 
    } 

    public void registerListener(MyListener myListener) { 
    this.mListener = myListener; 
    } 

public void setVisibility (int visibility) { 
    super.setVisibility(visibility); 
    if (mListener != null) 
    mListener.onSetVisibilityCalled(); 
} 

} 
8

リスナーを追加するビューをサブクラス化する必要があります。 setVisibilityの代わりにonVisibilityChangedを上書きする必要があります。 onVisibilityChangedは、祖先ビューが変更されたときを含む、何らかの理由でビューの可視性が変更されたときにトリガされます。

Viewの可視性が変更されたときに別のクラスに通知するには、インターフェイスが必要です。

例:

public class MyView extends View { 
    private OnVisibilityChangedListener mVisibilityListener; 

    public interface OnVisibilityChangedListener { 
    // Avoid "onVisibilityChanged" name because it's a View method 
    public void visibilityChanged(int visibility); 
    } 

    public void setVisibilityListener(OnVisibilityChangedListener listener) { 
    this.mVisibilityListener = listener; 
    } 

protected void onVisibilityChanged (View view, int visibility) { 
    super.onVisibilityChanged(view, visibility); 

    // if view == this then this view was directly changed. 
    // Otherwise, it was an ancestor that was changed. 

    // Notify external listener 
    if (mVisibilityListener != null) 
    mVisibilityListener.visibilityChanged(visibility); 

    // Now we can do some things of our own down here 
    // ... 
} 
} 
関連する問題