相关疑难解决方法(0)

ViewPager和片段 - 什么是存储片段状态的正确方法?

片段似乎非常适合将UI逻辑分离为某些模块.但随着ViewPager它的生命周期对我来说仍然是迷雾.因此迫切需要大师的想法!

编辑

见下面的哑解决方案;-)

范围

主要活动有ViewPager碎片.这些片段可以为其他(子域)活动实现一些不同的逻辑,因此片段的数据通过活动内部的回调接口填充.第一次发布时一切正常,但是!...

问题

当重新创建活动时(例如,在方向改变时),那么ViewPager碎片也是如此.代码(你会在下面找到)说每次创建活动时我尝试创建一个ViewPager与片段相同的新片段适配器(也许这就是问题)但FragmentManager已经将所有这些片段存储在某个地方(其中?)和为那些人启动娱乐机制.因此,重新启动机制使用我的回调接口调用来调用"旧"片段的onAttach,onCreateView等,以通过Activity的实现方法启动数据.但是这个方法指向通过Activity的onCreate方法创建的新创建的片段.

问题

也许我使用了错误的模式,但即便是Android 3 Pro也没有太多关于它的内容.所以,给我一两拳,并指出如何以正确的方式做到这一点.非常感谢!

主要活动

public class DashboardActivity extends BasePagerActivity implements OnMessageListActionListener {

private MessagesFragment mMessagesFragment;

@Override
protected void onCreate(Bundle savedInstanceState) {
    Logger.d("Dash onCreate");
    super.onCreate(savedInstanceState);

    setContentView(R.layout.viewpager_container);
    new DefaultToolbar(this);

    // create fragments to use
    mMessagesFragment = new MessagesFragment();
    mStreamsFragment = new StreamsFragment();

    // set titles and fragments for view pager
    Map<String, Fragment> screens = new LinkedHashMap<String, Fragment>();
    screens.put(getApplicationContext().getString(R.string.dashboard_title_dumb), new DumbFragment());
    screens.put(getApplicationContext().getString(R.string.dashboard_title_messages), mMessagesFragment);

    // …
Run Code Online (Sandbox Code Playgroud)

android design-patterns android-fragments android-viewpager

483
推荐指数
5
解决办法
22万
查看次数

片段未从内存中释放

我有一个活动,其中包含一个具有适配器FragmentStatePagerAdapter的View Pager.每次进入活动时,它将占用200mb的内存,在退回活动后(finish())然后重新输入它将附加并加倍手机上使用的内存.

在解决问题之后,似乎片段管理器没有释放片段,尽管我试图删除它们但它只是不起作用.

我尝试清空正在添加的片段以确保它不是片段内部的问题仍然存在.

我的适配器代码是

   private class ChildrenPagerAdapter extends FragmentStatePagerAdapter
   {
      private List<ChildBean> childrenBean;

      public ChildrenPagerAdapter(FragmentManager fm, List<ChildBean> bean)
      {
         super(fm);
         this.childrenBean = bean;
      }

      @Override
      public int getItemPosition(Object object)
      {
         return PagerAdapter.POSITION_NONE;
      }

      @Override
      public Fragment getItem(int position)
      {

         ReportFragment reportFragment = new ReportFragment();
         reportFragment.childBean = childrenBean.get(position);
         reportFragment.position = position;
         reportFragment.mPager = mPager;
         if(position == 0)
         {
            reportFragment.mostLeft = true;
         }
         if(position == childrenNumber - 1)
         {
            reportFragment.mostRight = true;
         }

         return reportFragment;
      }

      @Override
      public int getCount()
      { …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager

20
推荐指数
1
解决办法
1万
查看次数