几次滑动后片段不显示

时间:2014-03-19 09:08:20

标签: android android-fragments android-viewpager fragmentpageradapter

上下文:
执行一项活动,用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)

1 个答案:

答案 0 :(得分:0)

我自己找到了一个解决方案,虽然这是解决方法。将setOffscreenPageLimit的{​​{1}}设置为2而不是1,以便永远不会分离2个左右碎片:

ViewPager

这有效,但它没有解释为什么片段不会被重新连接,并且不能接受更多数量的片段,因为它会阻止内存释放。