Androidでカスタムビューを作成しました。このビューの可視性が変更されたときに、何らかの処理を行う必要があります。ビュー/ウィジェットの可視性が変更されたときに呼び出されるリスナーはありますか?
編集:
可視性を変更する方法を知っています。ビューに setVisibility を設定したときに呼び出されるリスナーがあるかどうかを知りたいです!
カスタム ビュー クラス内でその処理を行いますか? もしそうなら、setVisibility() メソッドをオーバーライドし、super() を呼び出してから、カスタム処理を実行してみませんか?
可視性を変更する方法を知っています。ビューに setVisibility を設定したときに呼び出されるリスナーがあるかどうかを知りたいです!
あなたview/widget
とオーバーライドをサブクラス化setVisibility
し、通知を受け取るインターフェースを登録する必要があります。例えば:
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();
}
}
リスナーを追加するビューをサブクラス化する必要があります。onVisibilityChanged
次に、の代わりにオーバーライドする必要がありますsetVisibility
。 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
// ...
}
}
ウィジェットの可視性を変更するには、widget.setVisibility(View.Visible)
またはwidget.setVisibility(View.Invisible)
メソッドを使用します。