上下文:
执行一项活动,用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
,因为我的片段包含大量“重”数据。有人曾经遇到过这个问题并且有解决方案吗?我做错了吗?
修改
在堆栈跟踪之后,片段已分离。有人知道为什么吗?如何重新安置?
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 :(得分:0)
我自己找到了一个解决方案,虽然这是解决方法。将setOffscreenPageLimit
的{{1}}设置为2而不是1,以便永远不会分离2个左右碎片:
ViewPager
这有效,但它没有解释为什么片段不会被重新连接,并且不能接受更多数量的片段,因为它会阻止内存释放。