Как обрабатывать изменения видимости для пользовательского представления/виджета android
Я написал пользовательский вид в Android. Мне нужно сделать некоторую обработку, когда видимость этого представления изменяется. Есть ли какой-то слушатель, который вызывается при изменении видимости представления / виджета ?
Edit:
Я знаю, как изменить видимость, хотел бы знать, если есть слушатель, который вызывается, когда мы setVisibility на вид!
4 ответов
ты хочешь сделать, что обработка в представлении класса? Если да, то почему бы просто не переопределить метод 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)
методы.