2013-12-08 60 views
2

我一直在構建一個應用程序,直到最近有minSdkVersion="14",但我想改變這一點,併爲api 10添加兼容性。我遇到的第一個問題是樣式但我整理了固定它通過使用Theme.AppCompat。現在我在代碼中遇到了問題,第一個問題是我使用了大量的片段。在API 10中添加對碎片的支持

出現在我的應用程序的第一個片段是:

FirstRunNotice firstRunNotice = new FirstRunNotice(); 
firstRunNotice.show(getFragmentManager(), "WhatDoesThisStringEvenDo?"); 
//.show method gives an error 

這是我的活動延伸DialogFragment內只是一個內部類。我如何在API 10上完成這項工作?如果我將其更改爲android.support.v4.app.DialogFragment,它似乎會將錯誤消除(使用Android Studio),但它很奇怪,因爲如果我在一個內部類(我有DialogFragments)上使用它,它將兩個錯誤都帶走。這是爲什麼?

此外,如果我要將所有Fragment擴展類更改爲android.support.v4.app.Fragment, .DialogFragment, .ListFragment ...如果我在更高的API上運行我的應用程序,比如說19,那麼該怎麼辦?應用程序是否會使用兼容性庫或者是否知道使用該API中的類?有什麼區別?

回答

3

由於現在您要支持薑餅和更低,您使用android.support.v4.app.*片段類爲您的應用程序編譯和運行。 到getFragmentManager()調用應該也與getSupportFragmentManager()

同樣重要的是要注意,調用getSupportFragmentManager()只是FragmentActivityActionBarActivity部分被替換(後者是前者的推廣。這是谷歌的ActionBarCompat庫的一部分) 。

這是因爲支持碎片是Android系統的補充,所以需要有一種方法來實現它們,而不要過分依賴Android內部(因爲Gingerbread和更低沒有Fragment的概念)。

但是,因爲如果我使用它在一個內部類(我有 DialogFragments)所花費的誤差遠在兩個很奇怪。這是爲什麼?

很可能你遇到多個Android的皮棉錯誤

什麼會是爲了以防萬一我經營提出了更高的API

沒有什麼應用程序,支持庫可與新的API版本也是如此。當然,如果您之前的代碼需要 API 11+,那麼您需要找出一種方法來回溯。

該應用使用兼容性庫還是知道使用該API的類 ?

支撐Fragmentdocumentation說:

當在Android 3.0或以上運行時,該實現仍然 使用;它不會嘗試切換到框架的實現。

將始終使用支持碎片。通常,這不是問題。

+0

感謝您的完美!我唯一不能工作的是'getFragmentManager()',如果我只是把它改成'getSupportFragmentManager()'方法不能解決... – Squeazer

+0

@Squeazer你現在正在擴展'FragmentActivity'或'ActionBarActivity'嗎?我是這麼認爲的,因爲你正在使用'Theme.AppCompat'。 –

+0

第一項活動擴展了「活動」。它基本上是從Web上加載一些xml文件的應用程序的啓動畫面。 'gerFragmentManager()'是從'onCreate()'和內部的'AsyncTask'類中調用的。 – Squeazer