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) {
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));
}
@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;
}
}
, (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);
transaction.show(myFragment());
transaction.commit();
:
...
transaction.remove(myFragment);
...
, , ( ), . - ?
, , .