1. 程式人生 > >android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576)

android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576)

這個是Android的一個BUG:

①當你按Home鍵的時候

②當你螢幕旋轉的時候

③當你從FragmentActivit跳到Activity中的時候

這三種情況都會引起該異常。

原因:

stackoverflow上的大神在Android原始碼中找到這樣一段程式碼,如下:

  1. if (f.mSavedViewState != null) {  
  2.     if (result == null) {  
  3.         result = new Bundle();  
  4.     }  
  5.     result.putSparseParcelableArray(  
  6.             FragmentManagerImpl.VIEW_STATE_TAG, f.mSavedViewState);  
  7. }  
  8. if (!f.mUserVisibleHint) {  
  9.     // Only add this if it's not the default value
  10.     result.putBoolean(FragmentManagerImpl.USER_VISIBLE_HINT_TAG, f.mUserVisibleHint);  
  11. }  
此段程式碼經過修改如下:
  1. if (f.mSavedViewState != null) {  
  2.     if (result == null) {  
  3.         result = new Bundle();  
  4.     }  
  5.     result.putSparseParcelableArray(  
  6.             FragmentManagerImpl.VIEW_STATE_TAG, f.mSavedViewState);  
  7. }  
  8. if (!f.mUserVisibleHint) {  
  9.     if (result == null) {  
  10.         result = new Bundle();  
  11.     }  
  12.     // Only add this if it's not the default value
  13.     result.putBoolean(FragmentManagerImpl.USER_VISIBLE_HINT_TAG, f.mUserVisibleHint);  
  14. }  

解決方法:(全是到stackoverflow,谷歌程式碼找到的)

①重寫onSaveInstanceState(Bundle outState),在該函式中不再呼叫super.onSaveInstanceState().(這種方法可以避免異常,僅僅是權宜之計,並不合理,不推薦使用該種方法)。

②重寫onSaveInstanceState(Bundle outState),再呼叫super.onSaveInstanceState()之前,新增這樣一句程式碼:

  1. setUserVisibleHint(true);  
這樣可以避免程式崩潰(不知道為什麼,有知道的大神,望告之)。

③在上面的大神已經給出了原因。因此為了不讓result為null。重寫onSaveInstanceState(Bundle outState),在呼叫super.onSaveInstanceState()之前,給outState新增一些內容即可。比如:

  1. outState.putString("WORKAROUND_FOR_BUG_19917_KEY""WORKAROUND_FOR_BUG_19917_VALUE");  


參考:

相關推薦

android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576)

這個是Android的一個BUG: ①當你按Home鍵的時候 ②當你螢幕旋轉的時候 ③當你從FragmentActivit跳到Activity中的時候 這三種情況都會引起該異常。 原因: stackoverflow上的大神在Android原始碼中找到這樣一段

Found 2 versions of android-support-v4.jar in the dependency list,The type android.support.v4.app.Fr

1、 Found 2 versions of android-support-v4.jar in the dependency list, but not all the versions are identical (check is based on SHA-1 only at t

Error: Program type already present: android.support.v4.app.FragmentTransitionCompat21$1

參考連結 https://stackoverflow.com/questions/52845161/error-program-type-already-present-android-support-v4-app-fragmenttransitionco 主要原因: gra

android.support.v4.app.backstackrecord$Op

Program type already present:android.support.v4.app.backstackrecord$Op (程式型別已經存在:android.support.v4.app.backstackrecord$Op) 本來專案好好的。。過了幾天執行就起不來了。。

Android Studio 提示 android.support.v4.app 不存在

Import 匯入的專案同步後提示 提示 android.support.v4.app 不存在錯誤,同時依賴提示錯誤如下圖: 錯誤原因:缺少android.support.v4.app 依賴包 解決方法: 1、File->Project Structure->

required 'Android.support.v4.app.Fragment' found 'android.app.Fragment.'錯誤解決

跟著網上教程一步一步的做一個andriod studio例子 結果在 FragmentTransaction fTransaction = fManager.beginTransaction();報錯:  required 'Android.support.v4.app.F

Android】required 'Android.support.v4.app.Fragment' found 'android.app.Fragment.'錯誤解決

跟著網上教程一步一步的做一個andriod studio例子 結果在 FragmentTransaction fTransaction = fManager.beginTransaction();報錯: required 'Android.support.v4.app.Fra

Error:程式包android.support.v4.app不存在;Error:找不到類FragmentActivity

最近把在eclipse中開發的android專案匯入到AS中,出現了一點小錯誤。用的是以非gradle方式將 Eclipse 專案匯入Android Studio,具體方法參考http://blog.c

androidfragment 無法轉換為android.support.v4.app.Fragment

一般是看兩個地方,,,,一,看一下activity中的導報是否正確二,看一個fragment中的導包是否正確(一定要將錯誤的包刪除import android.app.fragment)正確的包是importandroid.support.v4.app.Fragment;

android 配置報錯:Program type already present: android.support.v4.app.BackStackRecord$Op

最近在整理公司的一些專案,總結做過的專案檔案,每次從svn下載下來的專案 都會報錯,其他小問題 就不一一說了,見招拆招,碰到兩個頭疼的問題,最後發現 解決辦法是一樣 在這裡,跟大家分享一下,如果,你知道,可以忽略,錯誤:Program type already present

Program type already present: android.support.v4.app.backstackrecord$Op

除錯過程中如果出現上述錯誤 最好的解決辦法是把build.gradle檔案中的下面部分:dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.sup

import android.support.v4.app.Fragment後呼叫add方法報錯

首先需要匯入android-support-v4.jar包,方法見下: 進入Android\sdk\extras\android\support\v4,將其中的android-support-v4.jar複製,拷貝到android專案的app/libs下,右鍵點選jar檔案

android.support.v4.app.Fragment原始碼解析

Fragment最基礎功能使用 FragmentManager fm=getFragmentManager(); FragmentTransaction transaction=fm.beginTransaction(); mFirstFragment

新增android-support-v4 錯誤 java.lang.ClassNotFoundException: android.support.v4.view.ViewPager in loade

在使用ViewPager新增android-support-v4.jar後提示如下錯誤 11-15 21:01:21.725: E/AndroidRuntime(32431): Caused by: java.lang.ClassNotFoundException: a

android studio 中JAVA檔案提示android.support.v7.app.actionbaractivity is deprecated怎樣處理?

出這個提示的地方有寫解決辦法呀. android.support.v7.app.ActionBarActivity is deprecated; use AppCompatActivity instead   意思是 ActionBarActivity 在最

android 4.4報錯java.lang.RuntimeException: Unable to get provider android.support.v4.content.FileProvi

在android studio3.0 android 4.4.4 api 19下執行一直報錯如下: java.lang.RuntimeException: Unable to get provider android.support.v4.content.

java.lang.NoClassDefFoundError: android.support.v4.view.KeyEventCompat異常處理

異常資訊: java.lang.NoClassDefFoundError: android.support.v4.view.KeyEventCompat at android.support.v7.app.AppCompatActivity.dispatchKey

[已解決]: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4

今天開發的時候,發現明明有這個id,而且也通過findviewbyid獲取了,但是為什麼最後得到viewpager 是空呢? Caused by: java.lang.NullPointerException: Attempt to invoke virtual metho

兔子--Android Support v4包丟失的解決的方法

external extern add ras build -a post -- ont 在開發中,Android Support v4包丟失的解決的方法: Project->properties->Java Build Path->Librari

Attempt to invoke virtual method 'void android.support.v7.app.ActionBar.setHomeButtonEnabled(boolean)' on a null object reference

tac perf cti pla invoke one spa n) null 【Android】getActionBar()為null的解決方法總結 setContentView(R.layout.activity_main);android.support.v7.app