下面列出了android.view.ViewTreeObserver#removeOnGlobalLayoutListener ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
ActivityChooserModel dataModel = mAdapter.getDataModel();
if (dataModel != null) {
dataModel.unregisterObserver(mModelDataSetOberver);
}
ViewTreeObserver viewTreeObserver = getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
viewTreeObserver.removeOnGlobalLayoutListener(mOnGlobalLayoutListener);
}
if (isShowingPopup()) {
dismissPopup();
}
mIsAttachedToWindow = false;
}
public void detachFrom(ViewGroup viewGroup)
{
try
{
if (viewGroup == mViewGroup)
{
ViewTreeObserver viewTreeObserver = mViewGroup.getViewTreeObserver();
viewTreeObserver.removeOnGlobalFocusChangeListener(this);
viewTreeObserver.removeOnScrollChangedListener(this);
viewTreeObserver.removeOnGlobalLayoutListener(this);
viewTreeObserver.removeOnTouchModeChangeListener(this);
borderEffect.OnDetach(mView, viewGroup);
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
private void cleanUp() {
if (mAlive) {
final View viewRoot = mViewRoot.get();
if (null != viewRoot) {
final ViewTreeObserver observer = viewRoot.getViewTreeObserver();
if (observer.isAlive()) {
if (Build.VERSION.SDK_INT < 16) {
observer.removeGlobalOnLayoutListener(this);
} else {
observer.removeOnGlobalLayoutListener(this);
}
}
}
mEdit.cleanup();
}
mAlive = false;
}
static void removeGlobalLayoutListener(View view, ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener) {
final ViewTreeObserver observer = view.getViewTreeObserver();
if (!observer.isAlive()) {
return;
}
if (Build.VERSION.SDK_INT >= 16) {
observer.removeOnGlobalLayoutListener(onGlobalLayoutListener);
} else {
//noinspection deprecation
observer.removeGlobalOnLayoutListener(onGlobalLayoutListener);
}
}
@SuppressWarnings("deprecation")
@SuppressLint("NewApi")
private void removeGlobalOnLayoutListener(ViewTreeObserver obs, ViewTreeObserver.OnGlobalLayoutListener listener) {
if (obs == null)
return;
if (Build.VERSION.SDK_INT < 16) {
obs.removeGlobalOnLayoutListener(listener);
} else {
obs.removeOnGlobalLayoutListener(listener);
}
}
/**
* Removes global layout listener added in {@link #addGlobalLayoutListener()}.
*/
void removeGlobalLayoutListener() {
final ViewTreeObserver viewTreeObserver = mView.mPromptOptions.getResourceFinder().getPromptParentView().getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
viewTreeObserver.removeOnGlobalLayoutListener(mGlobalLayoutListener);
} else {
//noinspection deprecation
viewTreeObserver.removeGlobalOnLayoutListener(mGlobalLayoutListener);
}
}
}
@Override
protected void onDetachedFromWindow() {
ViewTreeObserver viewTreeObserver = getViewTreeObserver();
viewTreeObserver.removeOnScrollChangedListener(mOnScrollChangedListener);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
viewTreeObserver.removeOnGlobalLayoutListener(mOnGlobalLayoutListener);
} else {
viewTreeObserver.removeGlobalOnLayoutListener(mOnGlobalLayoutListener);
}
if (updateOnDraw
&& android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
viewTreeObserver.removeOnDrawListener(onDrawListener);
}
super.onDetachedFromWindow();
}
/**
* Helper method to remove a ViewTreeObserver correctly, i.e.
* avoiding the deprecated method on API level 16+.
* @param vto
* @param victim
*/
@SuppressWarnings("deprecation")
public static void removeViewTreeObserver(ViewTreeObserver vto, OnGlobalLayoutListener victim) {
if (MizLib.hasJellyBean()) {
vto.removeOnGlobalLayoutListener(victim);
} else {
vto.removeGlobalOnLayoutListener(victim);
}
}
public static void removeGlobalLayoutObserver(final ViewTreeObserver observer,
ViewTreeObserver.OnGlobalLayoutListener layoutListener) {
if (Build.VERSION.SDK_INT < 16) {
observer.removeGlobalOnLayoutListener(layoutListener);
} else {
observer.removeOnGlobalLayoutListener(layoutListener);
}
}
public void detachFrom(ViewGroup viewGroup) {
try {
if (viewGroup == mViewGroup) {
ViewTreeObserver viewTreeObserver = mViewGroup.getViewTreeObserver();//获取view树的观察者
viewTreeObserver.removeOnGlobalFocusChangeListener(this);//通知全局性移除相应的listener
viewTreeObserver.removeOnScrollChangedListener(this);
viewTreeObserver.removeOnGlobalLayoutListener(this);
viewTreeObserver.removeOnTouchModeChangeListener(this);
mMetroViewBorder.OnDetach(mView, viewGroup);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
@Override
protected void onDetachedFromWindow() {
ViewTreeObserver viewTreeObserver = getViewTreeObserver();
viewTreeObserver.removeOnScrollChangedListener(mOnScrollChangedListener);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
viewTreeObserver.removeOnGlobalLayoutListener(mOnGlobalLayoutListener);
} else {
viewTreeObserver.removeGlobalOnLayoutListener(mOnGlobalLayoutListener);
}
if (updateOnDraw
&& android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
viewTreeObserver.removeOnDrawListener(onDrawListener);
}
super.onDetachedFromWindow();
}
/**
* Remove a previously installed global layout callback.
* @param observer the view observer
* @param victim the victim
*/
@SuppressLint("NewApi")
@SuppressWarnings("deprecation")
public static void removeOnGlobalLayoutListener(ViewTreeObserver observer, ViewTreeObserver.OnGlobalLayoutListener victim) {
// Future (API16+)...
if (Build.VERSION.SDK_INT >= 16) {
observer.removeOnGlobalLayoutListener(victim);
}
// Legacy...
else {
observer.removeGlobalOnLayoutListener(victim);
}
}
public void detachFrom(ViewGroup viewGroup) {
try {
if (viewGroup == mViewGroup) {
ViewTreeObserver viewTreeObserver = mViewGroup.getViewTreeObserver();
viewTreeObserver.removeOnGlobalFocusChangeListener(this);
viewTreeObserver.removeOnScrollChangedListener(this);
viewTreeObserver.removeOnGlobalLayoutListener(this);
viewTreeObserver.removeOnTouchModeChangeListener(this);
borderEffect.OnDetach(mView, viewGroup);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void detachFrom(ViewGroup viewGroup) {
try {
if (viewGroup == mViewGroup) {
ViewTreeObserver viewTreeObserver = mViewGroup.getViewTreeObserver();//获取view树的观察者
viewTreeObserver.removeOnGlobalFocusChangeListener(this);//通知全局性移除相应的listener
viewTreeObserver.removeOnScrollChangedListener(this);
viewTreeObserver.removeOnGlobalLayoutListener(this);
viewTreeObserver.removeOnTouchModeChangeListener(this);
mMetroViewBorder.OnDetach(mView, viewGroup);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void detachFrom(ViewGroup viewGroup) {
try {
if (viewGroup == mViewGroup) {
ViewTreeObserver viewTreeObserver = mViewGroup.getViewTreeObserver();
viewTreeObserver.removeOnGlobalFocusChangeListener(this);
viewTreeObserver.removeOnScrollChangedListener(this);
viewTreeObserver.removeOnGlobalLayoutListener(this);
viewTreeObserver.removeOnTouchModeChangeListener(this);
mMetroViewBorder.OnDetach(mView, viewGroup);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
@Override
public final void onGlobalLayout() {
ViewTreeObserver observer = mView.getViewTreeObserver();
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN) {
observer.removeGlobalOnLayoutListener(this);
} else {
observer.removeOnGlobalLayoutListener(this);
}
mRunnable.run();
}
@SuppressWarnings("deprecation")
static void removeOnGlobalLayoutListener(ViewTreeObserver observer,
ViewTreeObserver.OnGlobalLayoutListener listener) {
observer.removeOnGlobalLayoutListener(listener);
}
public static void removeGlobalLayoutListener(ViewTreeObserver viewTreeObserver, OnGlobalLayoutListener keyboardListener) {
viewTreeObserver.removeOnGlobalLayoutListener(keyboardListener);
}
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
ViewTreeObserver vto = mLayout.getViewTreeObserver();
vto.removeOnGlobalLayoutListener(this);
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private static void removeGlobalLayoutListenerJB(ViewTreeObserver observer,
OnGlobalLayoutListener listener) {
observer.removeOnGlobalLayoutListener(listener);
}