通常以onXXX开头的方法是被回调的
- 主动调用的通常不会用on开头。
- 各种listener,当事件发生的时候会接受到回调。诸如Button.OnClickListener,实现这个接口的,需要实现onClick抽象方法,当发生onClick事件的时候,会被调用。
package android.view; public class View { public interface OnKeyListener { boolean onKey(View v, int keyCode, KeyEvent event); } public interface OnTouchListener { boolean onTouch(View v, MotionEvent event); } public interface OnHoverListener { boolean onHover(View v, MotionEvent event); } public interface OnGenericMotionListener { boolean onGenericMotion(View v, MotionEvent event); } public interface OnLongClickListener { boolean onLongClick(View v); } public interface OnDragListener { boolean onDrag(View v, DragEvent event); } public interface OnFocusChangeListener { void onFocusChange(View v, boolean hasFocus); } public interface OnClickListener { void onClick(View v); } public interface OnCreateContextMenuListener { void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo); } }
- 不会主动调用是一种相对概念,因为回调的方法,也需要有一个地方调用,这种场景通常是满足了某种条件去执行。
实现者调用的地方,存在其interface声明的类型,并对其调用,如onLongClick.
public boolean performLongClick() { sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_LONG_CLICKED); boolean handled = false; ListenerInfo li = mListenerInfo; if (li != null && li.mOnLongClickListener != null) { handled = li.mOnLongClickListener.onLongClick(View.this); } if (!handled) { handled = showContextMenu(); } if (handled) { performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); } return handled; }
- 不会主动调用通常是对于实现这个接口的类,不应该主动去调用。
如果一个类A实现了OnLongClickListener接口,那么类A是不应该自己调用onLongClick的。