在 onAdClosed() 方法中调用片段
Call a fragment inside onAdClosed() method
我有一个奇怪的问题。当向用户显示插页式广告并且用户将其关闭时,我在方法 onAdClosed()
中调用下一个片段。下面是我为此目的编写的代码
myInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdOpened() {
// Code to be executed when the ad is displayed.
}
@Override
public void onAdClosed() {
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);
TestFragment newCustomFragment = new TestFragment();
transaction.replace(((ViewGroup) view.getParent()).getId(), newCustomFragment);
transaction.commit();
}
});
它在新 API 上运行良好,但我在 API 19 上遇到问题。问题是广告关闭但下一个片段没有调用。之后,我将我的代码包装在一个处理程序中,这对我有用,即
@Override
public void onAdClosed() {
Handler handler_delete = new Handler();
handler_delete.postDelayed(new Runnable() {
@Override
public void run() {
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);
TestFragment newCustomFragment = new TestFragment();
transaction.replace(((ViewGroup) view.getParent()).getId(), newCustomFragment);
transaction.commit();
}
}, 300);
}
});
问题已解决,但我有时会遇到非法状态异常。我应该怎么做才能防止这种情况发生?
IllegalStateExceptions
在 onSaveInstanceState
调用后 replace
片段时抛出。你有两种方法来解决这个问题
您可以使用 commitAllowingStateLoss
代替 commit
创建你的 Handler
全局变量并调用 Handler.removeCallbacksAndMessages(null);
insde onPause
当前片段以删除执行 replace
我有一个奇怪的问题。当向用户显示插页式广告并且用户将其关闭时,我在方法 onAdClosed()
中调用下一个片段。下面是我为此目的编写的代码
myInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdOpened() {
// Code to be executed when the ad is displayed.
}
@Override
public void onAdClosed() {
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);
TestFragment newCustomFragment = new TestFragment();
transaction.replace(((ViewGroup) view.getParent()).getId(), newCustomFragment);
transaction.commit();
}
});
它在新 API 上运行良好,但我在 API 19 上遇到问题。问题是广告关闭但下一个片段没有调用。之后,我将我的代码包装在一个处理程序中,这对我有用,即
@Override
public void onAdClosed() {
Handler handler_delete = new Handler();
handler_delete.postDelayed(new Runnable() {
@Override
public void run() {
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);
TestFragment newCustomFragment = new TestFragment();
transaction.replace(((ViewGroup) view.getParent()).getId(), newCustomFragment);
transaction.commit();
}
}, 300);
}
});
问题已解决,但我有时会遇到非法状态异常。我应该怎么做才能防止这种情况发生?
IllegalStateExceptions
在 onSaveInstanceState
调用后 replace
片段时抛出。你有两种方法来解决这个问题
您可以使用
commitAllowingStateLoss
代替commit
创建你的
Handler
全局变量并调用Handler.removeCallbacksAndMessages(null);
insdeonPause
当前片段以删除执行replace