Как обрабатывать изменения видимости для пользовательского представления/виджета 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) методы.