ViewPager inside fragment disappears after transaction.remove () (Maintain instance?)

I am using Google API 8 (Android 2.2) with v4 packages.

Hi, here is my problem:

I have a FragmentActivity that has a menu that always stays on the screen and a bit of container (FrameLayout) where I put a lot of fragments. My application works fine when I hide and show fragments, but it crashes after loading all fragments, because I have limited memory. In this case, I had to remove some fragments when loading others, so that the application would not crash. But here another problem arises, my pagers do not restart after I delete them, all other fragments work fine. Only my pagers do not show, they do not fall, they just disappear. Here are some codes to let you know what my problem is about:

MyFragmentActivity.java has this layout:

 <LinearLayout

        ...(some code from menu that doesn't matter)

        <FrameLayout
            android:id="@+id/content"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
        </FrameLayout>
    </LinearLayout>

In this FrameLayout, I put all my fragments. Pager fragments are one of them, and its location is as follows:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <android.support.v4.view.ViewPager
        android:id="@+android:id/some_pager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
</LinearLayout>

AbstractPagerFragment:

import java.util.List;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public abstract class AbstractPagerFragment extends Fragment {


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View fragment = inflater.inflate(getLayoutID(), container,false);
        PagerAdapter mPagerAdapter = initializePager();
        ViewPager pager = (ViewPager) fragment.findViewById(getPagerID());
        pager.setAdapter(mPagerAdapter);
        return fragment;
    }

    private PagerAdapter initializePager() {
        PagerAdapter mPagerAdapter = new templateDigital.util.PagerAdapter(getFragmentManager(), getFragments());
        return mPagerAdapter;

    }

    public abstract List<Fragment> getFragments();

    public abstract int getLayoutID();

    public abstract int getPagerID();

}

PagerAdapter, :

import java.util.List;

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

public class PagerAdapter extends FragmentPagerAdapter{

    private List<Fragment> fragments;

    public PagerAdapter(FragmentManager fManager, List<Fragment> fragments) {
        super(fManager);
        this.fragments = fragments;
    }


    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }


    @Override
    public int getCount() {
        return fragments.size();
    }

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

AbstractPagerFragment:

import templateDigital.main.R;
import templateDigital.util.fragments.AbstractPagerFragment;
import templateDigital.util.fragments.GenericFragment;
import android.support.v4.app.Fragment;

public class ConcretePagerFragment extends AbstractPagerFragment {

    private List<Fragment> fragments;

    public ConcretePagerFragment() {
        fragments = new ArrayList<Fragment>();
        fragments.add(new GenericFragment(R.layout.concept_page1_fragment));
        fragments.add(new GenericFragment(R.layout.concept_page2_fragment));
        fragments.add(new GenericFragment(R.layout.concept_page3_fragment));

        //GenericFragments is a class that extends Fragments and just inflate a layout with a background image.
    }

    @Override
    public List<Fragment> getFragments() {
        return fragments;
    }

    @Override
    public int getLayoutID() {
        return R.layout.pager_fragment;
    }

    @Override
    public int getPagerID() {
        return R.id.some_pager; // the pager inside the layout
    }
}

, (FrameLayout), (myFragment - PagerFragment, myTag - , , ):

FragmentTransaction transaction = fragmentManager.beginTransaction();
    if (fragmentManager.findFragmentByTag(myTag) == null) {
        transaction.add(R.id.content,myFragment, myTag);
    }

    transaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out);
    hideAllOtherFragments(myTag, transaction); //Here I hide all other fragments, the code is okay. Trust me.
    transaction.show(myFragment());
    transaction.commit();

:

...
transaction.remove(myFragment);
...

, , ( ), . - ?

, , .

+5
1

, ViewPager , TabHost, TabWidget FrameLayout ViewPager.

TabHost . : , , , FrameLayout - , . , TabAdapter (- PagerAdapter) , mTabsAdapter.addTab

, , ViewPager. , .

0

All Articles