android之Fragment的bug解決
最近做一個功能,當第二次進入一個介面的時候出現一個奇怪的bug,如下面詳細的log資訊:
如上的log資訊可以知道:載入了一個(Duplicate)重複的Fragment(CaptionPropertiesFragment)。問題是程式碼應該是沒有問題的!具體看看我係的程式碼:10-01 13:36:23.549: E/AndroidRuntime(14188): Process: com.android.settings, PID: 14188 10-01 13:36:23.549: E/AndroidRuntime(14188): android.view.InflateException: Binary XML file line #43: Error inflating class fragment 10-01 13:36:23.549: E/AndroidRuntime(14188): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713) 10-01 13:36:23.549: E/AndroidRuntime(14188): at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 10-01 13:36:23.549: E/AndroidRuntime(14188): at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 10-01 13:36:23.549: E/AndroidRuntime(14188): at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 10-01 13:36:23.549: E/AndroidRuntime(14188): at com.android.settings.accessibility.ToggleCaptioningPreferenceFragment.onCreateView(ToggleCaptioningPreferenceFragment.java:69) 10-01 13:36:23.549: E/AndroidRuntime(14188): at android.app.Fragment.performCreateView(Fragment.java:1700) 10-01 13:36:23.549: E/AndroidRuntime(14188): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890) 10-01 13:36:23.549: E/AndroidRuntime(14188): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) 10-01 13:36:23.549: E/AndroidRuntime(14188): at android.app.BackStackRecord.run(BackStackRecord.java:698) 10-01 13:36:23.549: E/AndroidRuntime(14188): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447) 10-01 13:36:23.549: E/AndroidRuntime(14188): at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443) 10-01 13:36:23.549: E/AndroidRuntime(14188): at android.os.Handler.handleCallback(Handler.java:808) 10-01 13:36:23.549: E/AndroidRuntime(14188): at android.os.Handler.dispatchMessage(Handler.java:103) 10-01 13:36:23.549: E/AndroidRuntime(14188): at android.os.Looper.loop(Looper.java:193) 10-01 13:36:23.549: E/AndroidRuntime(14188): at android.app.ActivityThread.main(ActivityThread.java:5333) 10-01 13:36:23.549: E/AndroidRuntime(14188): at java.lang.reflect.Method.invokeNative(Native Method) 10-01 13:36:23.549: E/AndroidRuntime(14188): at java.lang.reflect.Method.invoke(Method.java:515) 10-01 13:36:23.549: E/AndroidRuntime(14188): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824) 10-01 13:36:23.549: E/AndroidRuntime(14188): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640) 10-01 13:36:23.549: E/AndroidRuntime(14188): at dalvik.system.NativeStart.main(Native Method) 10-01 13:36:23.549: E/AndroidRuntime(14188): Caused by: java.lang.IllegalArgumentException: Binary XML file line #43: Duplicate id 0x7f0b0034, tag null, or parent id 0xffffffff with another fragment for com.android.settings.accessibility.CaptionPropertiesFragment 10-01 13:36:23.549: E/AndroidRuntime(14188): at android.app.Activity.onCreateView(Activity.java:4912) 10-01 13:36:23.549: E/AndroidRuntime(14188): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689)
public class ToggleCaptioningPreferenceFragment extends Fragment { private static final float DEFAULT_FONT_SIZE = 48f; private CaptionPropertiesFragment mPropsFragment; private SubtitleView mPreviewText; private CaptioningManager mCaptioningManager; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mCaptioningManager = (CaptioningManager) getActivity() .getSystemService(Context.CAPTIONING_SERVICE); } @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View rootView = inflater.inflate(R.layout.captioning_preview, container, false); // We have to do this now because PreferenceFrameLayout looks at it // only when the view is added. if (container instanceof PreferenceFrameLayout) { ((PreferenceFrameLayout.LayoutParams) rootView.getLayoutParams()).removeBorders = true; } return rootView; }
從報錯資訊可以知道出錯的程式碼:final View rootView = inflater.inflate(R.layout.captioning_preview, container, false);
那麼報錯資訊說是載入了重複的Fragment(CaptionPropertiesFragment)。實際上這個重複的Fragment在這個layout檔案裡面佈局的:R.layout.captioning_preview。
很顯然,就是第一次進入這個介面,再退出的時候,這個用過的Fragment(CaptionPropertiesFragment)沒有remove掉!從而出現了兩個問題:
(1)為什麼會出現這個Fragment(CaptionPropertiesFragment)沒有remove,
(2)怎麼解決這個問題!
在activity中不同的frament之間專案替換的時候,FragmentManager只會remove和add這些frament,然而這些frament裡面自己載入的frament(這裡就是我們的CaptionPropertiesFragment)是沒有被remove. 很顯然這是一個缺陷!因為後一個frament(CaptionPropertiesFragment)很明顯是依賴與他的父frament的,應該同時遞迴的remove.
那麼如何解決這個問題呢!很顯然就是在不用這個frament(ToggleCaptioningPreferenceFragment)的時候把他裡面載入的frament給remove掉!這個操作在ToggleCaptioningPreferenceFragment的onDestroyView()裡面就可以解決問題了!如下程式碼:
@Override
public void onDestroyView() {
super.onDestroyView();
if(mPropsFragment != null){
FragmentManager f = getFragmentManager();
if(f != null && !f.isDestroyed()){
final FragmentTransaction ft = f.beginTransaction();
if(ft != null){
ft.remove(mPropsFragment).commit();
}
}
}
}
這裡要注意f.isDestroyed()這樣來判斷是否這個FragmentManager處於Destroyed,如果不加這個判斷的話,橫豎屏切換時候會出錯!
注意:對於這個問題,網上有各種無效的解決辦法。
相關推薦
Android之如何解決部分手機拍照拍出來的照片是黑色
如何解決部分手機拍照拍出來的照片是黑色 最近專案做的是遠端拍照和遠端截圖的問題,遠端截圖用的是Android 5.0之後的API,MediaPrejectionManger, 拍照用的是呼叫系統的camera,用的surfaceView進
Android之jni解決JNIEnv跨執行緒問題
1、問題 JNIEnv是一個執行緒相關的變數 JNIEnv 對於每個 thread 而言是唯一的 JNIEnv *env指標不可以為多個執行緒共用 2、解決辦法 java虛擬機器的Jav
Android之Error: 'L' is not a valid file-based resource name character解決辦法
copyto base logo lower too exec article 問題 tools 1、問題 [html] view plain copy Error:Execution failed for task ‘:mergeBYODReleaseR
Android之——使用Android studio建立的AIDL編譯時找不到自定義類的解決辦法
使用AS建立ADIL檔案時AS會在main資料夾下給我們生成一個aidl資料夾和一個相同包名的包,通常我們會把所有和ADIL相關的類或檔案放在這個包下,但是如果存在自定義的類時,程式編譯時無法通過,提示找不到自定義的包。解決辦法如下,在啟動Module的build.gra
Android之Android WebView常見問題及解決方案彙總
就目前而言,如何應對版本的頻繁更新呢,又如何靈活多變地展示我們的介面呢,這又涉及到了web app與native app之間孰優孰劣的爭論. 於是乎,一種混合型的app誕生了,靈活多變的部分,如淘寶商城首頁的活動頁面,一集凡客誠品中我們都可以見到web 頁面與native頁面
Android之打造自己載入高清大圖及瀑布流框架.解決錯位等問題.
首先看效果圖如下: 本框架支援本地圖片和網路圖片的獲取.採用LruCache演算法,最少使用的最先釋放.有效的避免OOM,專案結構圖: 核心載入類在於ImageLoader.採用了TreadPool去做併發請求.UI處理採用Handler
深坑之Webview,解決H5呼叫android相機拍照和錄影
最近在開發過程中遇到一個問題,主要是呼叫第三方的實名認證,需要拍照和錄影; 辦過支付寶大寶卡和騰訊的大王卡的都知道這玩意,辦卡的時候就需要進行實名認證,人臉識別; 本來第三方平臺(xxx流量公司)說的是直接用WebView載入這個H5介面就完事了,我心想這麼簡單
Android之解決太大太多圖片造成的oom
在最近做的工程中發現載入的圖片太多或圖片過大時經常出現OOM問題,找網上資料也提供了很多方法,但自己感覺有點亂,特此,今天在不同型號的三款安卓手機上做了測試,因為有效果也有結果,今天小馬就做個詳細的總結,以供朋友們共同交流學習,也供自己以後在解決OOM問題上有所提高,提前講下,片幅有點長,涉及的東西太多,大家
Android之MIUI系統BUG:呼叫拍照後不返回當前activity解決辦法
public void photo() { String state = Environment.getExternalStorageState(); if (state.equals(Environment.MEDIA_MOUNTED)) { //判斷資料夾是否存在,我的資料夾路徑是SDP
Android之Android studio如何解決Multiple dex files define Landroid/support/a(檔案重複引用錯誤)
先爆錯誤的圖片照,如下 define 可以理解檔案重複的意思,所以這個錯誤是我匯入了v4.jar包的原因,因為我專案裡面本來就有v7.jar,如下圖 解決辦法一:
Android之xxx is not a concrete class解決辦法
今天給以前一個app加歡迎介面,照著網上的教程做,改manifest.xml檔案的時候給我報一個com.aaa.Welcome is not a concrete class的錯誤,百思不得其解 我
android之Fragment的bug解決
最近做一個功能,當第二次進入一個介面的時候出現一個奇怪的bug,如下面詳細的log資訊: 10-01 13:36:23.549: E/AndroidRuntime(14188): Process: com.android.settings, PID: 14188 10-01
Android之解決Base64 encode中文亂碼問題
1、問題 需求需要,把字串轉化為UTF-8編碼之後需要base64.encode處理,但是我寫了 String ss = new String(value.getbytes("UTF-8"), "UTF-8"); Base64.encode(ss); 死活出不來,依然亂碼
Android Study 之 徹底解決 Gson解析 異常 :com.google.gson.JsonSyntaxException
LZ-Say:大風呼呼的刮,就好像妖精要來的前奏一樣~ 前言 開發過程中,App常用的接收引數的時候,幾乎大部分都是以json格式為主,那麼有關解析json的方式有很多,Android端相對來說使用Gson比較多,而在解析過程中,如果
Android之ListView包含RadioButton的單選問題解決辦法
1.最簡潔的解決辦法。 adapter裡儲存當前選中的位置變數,getView方法裡,禁用radiobutton的點選事件,只通過listview的onItemClick事件設定選中位置變數,並且通過notifyDataSetChanged重新整理列表。getView方法裡
我的Android進階之旅------>解決錯誤:You need to use a Theme.AppCompat theme (or descendant) with this activity.
#1、錯誤描述 今天,想實現Activity不顯示標題欄的效果,在專案的AndroidManifest.xml檔案,對相應的Activity新增屬性 android:theme="@android:style/Theme.NoTitleBar" 具體程式
Android之部分手機(oppo r9s)安裝app出現崩潰問題解決辦法
1、問題現象 部分手機(oppo r9s)安裝release版本的apk出現了崩潰,但是部分手機安裝正常 2、崩潰日誌 01-15 09:42:37.239 5889 5889 E AndroidRuntime: java.lang.OutOfMemoryError
我的Android進階之旅------>解決Error:Could not find property 'compile' on org.gradle.api.internal.artifacts.
1錯誤描述 解決方法 1錯誤原因 2解決方法 1、錯誤描述 剛剛,Android Studio突然編譯不了了,報瞭如下錯誤: Error:Could not find proper
Android之視訊播放器的使用及解決的問題
前言 根據專案要求 做一個淘寶今日頭條的功能 要求實現圖文和視訊的混排 在之前的部落格中我已經寫了頭條滾動demo———今日頭條的demo地址 就是這樣的一個效果 點選這個控制元件後 進入↓↓↓頭條的頁面 這篇部落格主要是記錄視訊的使用 關於文
android開發步步為營之105:解決鍵盤彈起頁面被頂上去問題
這個問題,我想大家經常碰到,網上回答的很多,但是沒有找到我想要的,網上提供的解決方案:1、比如Android:windowsoftinputmode="adjustpan" 2、使用scrollview 兩種都沒有解決我的問題,後來我就各種除錯啊,各