0

上下文:
使用3個片段執行活動刷新,每個片段在內存使用中相當「沉重」。幾次滑動後不顯示片段

症狀:
幾次滑動後,右側和左側碎片不再顯示,並被黑色空背景替換。中心片段仍然顯示。

要注意:

  • 我用下面的其他項目,這同實施包含更多的靜態佈局沒有任何問題 片段。
  • 該問題似乎沒有出現在所有設備上。

我實施FragmentPagerAdapter的:

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 

public class MyFragmentPagerAdapter extends FragmentPagerAdapter { 

    public MyFragmentPagerAdapter(final FragmentManager fm, final Context context) { 
    super(fm); 
    } 

    @Override 
    public Fragment getItem(final int i) { 
    switch (i) { 
    case 0: 
     return new FragmentA(); 
    case 1: 
     return new FragmentB(); 
    default: 
     return new FragmentC(); 
    } 
    } 

    @Override 
    public int getCount() { 
    return 3; 
    } 
} 

在我的活動:

import android.support.v4.app.FragmentActivity; 
import android.support.v4.view.ViewPager; 

...

private MyFragmentPagerAdapter fragmentPagerAdapter; 
    private ViewPager mViewPager; 

    @Override 
    public void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_dummy); 

    this.fragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager()); 

    // Set up the ViewPager, attaching the adapter. 
    this.mViewPager = (ViewPager) findViewById(R.id.actMainPager); 
    this.mViewPager.setAdapter(this.fragmentPagerAdapter); 

我的假設是,碎片被摧毀免費一些記憶和不再創造。

我的嘗試:

  • 使用FragmentStatePagerAdapter,因爲我的碎片中含有大量的 「重」 的數據。
  • 我在這裏找不到任何與此問題相關的內容或使用Google搜索。

有人遇到過這個問題,並有解決方案嗎?我做錯了什麼?


編輯

繼堆棧跟蹤,該片段已經被拆卸。有人知道爲什麼嗎?如何重新貼上它?

Exception in handleMessage: java.lang.IllegalStateException: Fragment StatusFragment{41f9bc20} not attached to Activity 
03-19 12:46:06.743: W/BaseFragment(30801): at android.support.v4.app.Fragment.getResources(Fragment.java:579) 
03-19 12:46:06.743: W/BaseFragment(30801): at com.dummy.fragment.BaseFragment.updateButtonStatus(BaseFragment.java:482) 
03-19 12:46:06.743: W/BaseFragment(30801): at com.dummy.fragment.BaseFragment$MyHandler.handleMessage(BaseFragment.java:467) 

回答

0

我找到了自己的解決方案,althought這是一個解決方法。爲了使2左,右片段組合的ViewPager至2,而不是1 setOffscreenPageLimit從未被分離:

this.mViewPager = (ViewPager) findViewById(R.id.actMainPager); 
this.mViewPager.setAdapter(this.fragmentPagerAdapter); 
mViewPager.setOffscreenPageLimit(2); 

這工作,但它並沒有解釋爲什麼片段如不重新連接,也不會成爲較大的數字可以接受片段,因爲它可以防止記憶釋放。