片段从FragmentStatePagerAdapter中消失

时间:2013-12-16 08:48:14

标签: android android-fragments fragmentstatepageradapter

在我的应用中,我使用的是FragmentStatePagerAdapter ViewPager

一切正常,但是当我从后台来的时候,记忆被清理了。

在这种情况下,有些the fragments have disappeared。消失的碎片不可见,但确实采取了洞屏幕。我看不到任何东西。

是什么导致这种情况?

谢谢!

3 个答案:

答案 0 :(得分:0)

可能的解决方案,考虑到问题定义不佳:

重新创建活动后,会重新显示片段。因此,视图中的窗口小部件链接到上一个活动,并且您没有正确地重新膨胀视图并重新连接onCreateView()中的窗口小部件(重做findByID()命令)。

每次重新创建Activity时,所有Fragments都必须在onCreateView()中重做这些内容。

答案 1 :(得分:0)

onCreate尝试设置片段中的setRetainInstance(true);

答案 2 :(得分:0)

我正在使用此代码...在另一个文件(可能是TestViewPager.java)上测试它,看它是否有效并且可能适应您的代码。

对我来说......它就像魔术一样:P但是......我是Android上的新手,所以也许你需要另一个代码解决方案(抱歉,我说西班牙语:P)

public class Home_ViewPager extends ActionBarActivity
implements ActionBar.TabListener {

    funcionPagerAdapter miPagerAdapter;
    ViewPager miViewPager;

    public void onCreate(Bundle EstadoInstanciaSalvada){
        super.onCreate(EstadoInstanciaSalvada);
        setContentView(R.layout.home_viewpager);

        miPagerAdapter = new funcionPagerAdapter(getSupportFragmentManager());
        miViewPager = (ViewPager) findViewById(R.id.vpContenedor);
        miViewPager.setAdapter(miPagerAdapter);

        final ActionBar actionBar = getSupportActionBar();
        actionBar.setHomeButtonEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        //Set a Tab when a Fragment is selected
        miViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                actionBar.setSelectedNavigationItem(position);
            }
        });

        actionBar.addTab(actionBar.newTab().setText(R.string.tab1_title).setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText(R.string.tab2_title).setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText(R.string.tab3_title).setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText(R.string.tab4_title).setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText(R.string.tab5_title).setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText(R.string.tab6_title).setTabListener(this));
        miViewPager.setCurrentItem(1);
    }


    @Override
    public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
    }

    @Override
    public void onTabSelected(Tab arg0, FragmentTransaction arg1) {
        miViewPager.setCurrentItem(arg0.getPosition());
    }

    @Override
    public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
    }

    public static class funcionPagerAdapter extends FragmentPagerAdapter{
        public funcionPagerAdapter(FragmentManager fm){
            super(fm);
        }

        @Override
        public Fragment getItem(int itemCapturado) {
            switch(itemCapturado){
            case 0: return new fragment_1();
            case 1: return new fragment_2();
            case 2: return new fragment_3();
            case 3: return new fragment_4();
            case 4: return new fragment_5();
            case 5: return new fragment_6();
            default:
                Fragment miFragmento = new fragment_1();
                return miFragmento;
            }
        }

        @Override
        public int getCount() {
            return 6;
        }
    }

    public static class fragment_1 extends ListFragment {
        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);

            String[] arrayDeValores = new String[] { "yourItem1", "yourItem2", "yourItem3", "yourItem4", "yourItem5", "yourItem6"};

            setListAdapter(new ArrayAdapter<String>(getActivity(),
            android.R.layout.simple_list_item_1, arrayDeValores));
        }

        @Override
        public void onListItemClick(ListView l, View v, int position, long id) {
            // Do something with the data
        }
    }

    //Others Fragments Here...

}