Getting the error: "java.lang.IllegalStateException: Activity has been destroyed" when doing notifyDataSetChanged for viewPager adapter
Getting the error: "java.lang.IllegalStateException: Activity has been destroyed" when doing notifyDataSetChanged for viewPager adapter
我在 onActivityResult(...) 方法中从 activity class 为视图寻呼机适配器调用 notifyDataSetChanged() 。我面临“致命异常:java.lang.IllegalStateException:Activity 已被销毁
" 仅在某些设备中出现错误。下面是堆栈跟踪。
Fatal Exception: java.lang.IllegalStateException: Activity has been destroyed
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1515)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:638)
at android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:621)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:139)
at android.support.v4.view.ViewPager.dataSetChanged(ViewPager.java:1003)
at android.support.v4.view.ViewPager$PagerObserver.onChanged(ViewPager.java:2996)
at android.support.v4.view.PagerAdapter.notifyDataSetChanged(PagerAdapter.java:279)
at com.demo.activities.ActivityMain.run(ActivityMain.java:180)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6351)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:896)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:786)
视图分页器仅包含两个片段(v4)。我在下面的代码中执行 notifyDataSetChanged 的行中出现错误。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == 100) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
mViewPager.getAdapter().notifyDataSetChanged();
}
}, 1000);
}}
我是否需要在 运行 方法中执行任何检查以检查 activity 是否仍然存在以避免此异常?
无论何时使用 Delay 或在回调中访问实例变量或上下文,都应首先检查其是否存在。
对于Activity
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if(!isFinishing())
mViewPager.getAdapter().notifyDataSetChanged();
}
}, 1000);
片段
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if(isAdded())
mViewPager.getAdapter().notifyDataSetChanged();
}
}, 1000);
我在 onActivityResult(...) 方法中从 activity class 为视图寻呼机适配器调用 notifyDataSetChanged() 。我面临“致命异常:java.lang.IllegalStateException:Activity 已被销毁 " 仅在某些设备中出现错误。下面是堆栈跟踪。
Fatal Exception: java.lang.IllegalStateException: Activity has been destroyed
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1515)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:638)
at android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:621)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:139)
at android.support.v4.view.ViewPager.dataSetChanged(ViewPager.java:1003)
at android.support.v4.view.ViewPager$PagerObserver.onChanged(ViewPager.java:2996)
at android.support.v4.view.PagerAdapter.notifyDataSetChanged(PagerAdapter.java:279)
at com.demo.activities.ActivityMain.run(ActivityMain.java:180)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6351)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:896)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:786)
视图分页器仅包含两个片段(v4)。我在下面的代码中执行 notifyDataSetChanged 的行中出现错误。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == 100) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
mViewPager.getAdapter().notifyDataSetChanged();
}
}, 1000);
}}
我是否需要在 运行 方法中执行任何检查以检查 activity 是否仍然存在以避免此异常?
无论何时使用 Delay 或在回调中访问实例变量或上下文,都应首先检查其是否存在。
对于Activity
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if(!isFinishing())
mViewPager.getAdapter().notifyDataSetChanged();
}
}, 1000);
片段
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if(isAdded())
mViewPager.getAdapter().notifyDataSetChanged();
}
}, 1000);