Bạn phải phân lớp chế độ xem bạn muốn thêm người nghe vào. Sau đó, bạn nên ghi đè onVisibilityChanged
thay vì setVisibility
. onVisibilityChanged
được kích hoạt khi chế độ hiển thị của chế độ xem bị thay đổi vì bất kỳ lý do nào, kể cả khi chế độ xem tổ tiên đã được thay đổi.
Bạn sẽ cần một giao diện nếu bạn muốn một lớp khác được thông báo khi thay đổi mức độ hiển thị của View
.
Ví dụ:
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
// ...
}
}
Giải thích hơn một chút, xin vui lòng – cgalvao1993