Java 在onAdClosed()方法中调用片段
我有一个奇怪的问题。当向用户显示间隙广告并用户将其关闭时,我正在调用方法Java 在onAdClosed()方法中调用片段,java,android,admob,Java,Android,Admob,我有一个奇怪的问题。当向用户显示间隙广告并用户将其关闭时,我正在调用方法onAdClosed()中的下一个片段。下面是我的代码 myInterstitialAd.setAdListener(new AdListener() { @Override public void onAdOpened() { // Code to
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中遇到了一个问题。问题是ad关闭,但下一个片段不调用。在那之后,我将代码包装在一个处理程序中,这对我来说是有效的
@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);
}
});
问题解决了,但我有时会遇到非法的状态例外。我应该怎么做才能防止这种情况发生?
onSaveInstanceState
调用后replace
fragment时抛出非法状态异常。你有两种方法来解决这个问题
committellowingstateloss
而不是commit
Handler
全局变量并调用Handler.removeCallbacksAndMessages(null)
insdeonPause
删除当前片段执行replace