1

我不能爲我的生活弄清楚爲什麼有時我的應用程序啓動,暫停和恢復後,我的碎片變得無法控制。ViewPager應用程序在後臺時碎片被破壞?

我抱到我的片段引用這樣的:

public class MainActivity ... { 

    public static AccountFragment accountFragment; 
    .... 

    @Override 
    protected void onCreate(... { 

     accountFragment = new AccountFragment(this); 
     ... 
    } 

我有一個微調自定義工具欄在理論上應該允許用戶造成的AsyncTask在AccountFragment運行。實現此方法,像這樣:

if (accountFragment.getView() != null) { 

    accountFragment.load() 
} 

然後創建一個ViewPager,一個FragmentPagerAdapter等

這工作完全罰款的大部分時間。用戶可以在Spinner中選擇一個新項目,AccountFragment會相應更新。但是,有時在應用程序停止並稍後恢復後,AccountFragment完全不會響應任何內容。甚至應該影響帳戶片段的其他視圖也沒用。這對我來說沒有任何意義,因爲AccountFragment的視圖不能爲null,並且由accountFragment.load()執行的AsyncTask對onPreExecute中的UI進行了一些非常簡單的更改,這應該非常明顯(例如,Everything消失並顯示ProgressBar )這根本就沒有發生。

任何想法?

回答

1

沒有足夠的代碼來確切知道這裏出了什麼問題,但也有一些你做錯了的東西。

1)不要在public static字段中存儲片段引用。最多隻能使用privateprotected。閱讀基本的Java手冊以獲得解釋。

2)不要超載Fragment的構造函數,它的設計令人沮喪。如果您需要傳遞一些值,請使用參數進行操作。

3)我猜你在執行onCreate()方法的過程中,如果正在重新創建或新創建,你不會執行檢查。你可能會得到兩個AccountFragment的實例,其中一個實例處於一個奇怪的分離狀態。

...

你或許應該花更多的時間研究有關片段/活動的關係,以及如何避免這樣的情況基本知識。

+0

感謝您的全面回答! 1:好的,我會這樣做的。 2:我的片段需要以某種方式參考我的MainActivity。那該怎麼辦呢? 3:如果onCreate正在重新創建或正在創建,我將如何判斷?如果我發現它正在被重新創建,我會做些什麼改變? – zholmes1 2014-10-22 17:03:50

+0

你的片段有getActivity()方法。您可以將返回的活動轉換爲MainActivity。關於娛樂:如果onCreate()方法中的savedInstanceState爲空,那麼通常意味着該Activity是新創建的。如果它不爲空,則重新創建。 – 2014-10-22 17:30:09

+0

你是否認爲可能圍繞我的實例化我的片段與以下如果塊可能工作?if(savedInstanceState == null){//實例化片段} – zholmes1 2014-10-24 07:40:51