片段显示重置 [英] Fragments display getting reset

查看:102
本文介绍了片段显示重置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经在MainActivity上使用 TabLayout ViewPager 设置了片段列表

I have setup a list of fragments using TabLayout and ViewPager on MainActivity as such

public class MainActivity extends AppCompatActivity implements Fragment1.OnFragmentInteractionListener, Fragment2.OnFragmentInteractionListener, Fragment3.OnFragmentInteractionListener, Fragment4.OnFragmentInteractionListener
, Fragment5.OnFragmentInteractionListener{

    TabLayout tabLayout;
    ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().hide();

        setContentView(R.layout.activity_main);

        viewPager = (ViewPager) findViewById(R.id.viewPager);
        viewPager.setAdapter(new CustomAdapater(getSupportFragmentManager(), getApplicationContext()));

        tabLayout = (TabLayout) findViewById(R.id.tabLayout);
        tabLayout.setupWithViewPager(viewPager);

        tabLayout.setSelectedTabIndicatorColor(Color.parseColor("#51ffff"));

        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
                switch (tab.getPosition()) {
                    case 0:
                        tabLayout.setSelectedTabIndicatorColor(Color.parseColor("#ced21f"));
                        break;
                    case 1:
                        tabLayout.setSelectedTabIndicatorColor(Color.parseColor("#51ffff"));
                        break;
                    case 2:
                        tabLayout.setSelectedTabIndicatorColor(Color.parseColor("#FF0000"));
                        break;
                }
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }

        });

    }

    @Override
    public void onFragmentInteraction(Uri uri) {

    }


    private class CustomAdapater extends FragmentPagerAdapter {

        private String fragments[] = {"Control", "Connection", "Log", "Others", "Others2"};

        public CustomAdapater(FragmentManager supportFragmentManager, Context applicationContext) {
            super(supportFragmentManager);
        }

        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    return new Fragment1();
                case 1:
                    return new Fragment3();
                case 2:
                    return new Fragment2();
                case 3:
                    return new Fragment4();
                case 4:
                    return new Fragment5();
                default:
                    return null;
            }
        }

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

        @Override
        public CharSequence getPageTitle(int position) {
            return fragments[position];
        }
    }
}

以某种方式,当我从Fragment1过渡到Fragment3并返回Fragment1时,Fragment1上的视图被重置为原始状态(就像刚创建的一样).

Somehow when I transit from Fragment1 to Fragment3 and back to Fragment1, the views on Fragment1 gets reset to original state(Like it was just created).

仅当我将2个片段从当前片段移开时才会发生.例如2-> 4或3-> 1.如果过渡相邻,则一切都很好,例如2-> 3或1-> 2.

This only happens if I transit 2 fragment away from the current Fragment. For example 2->4 or 3->1. Everything is fine if the transition is next to each other, for example 2->3 or 1->2.

这是我的第一个Android应用程序,请原谅我.

This is my first android app so do pardon me.

似乎正在创建一个新片段,而不是加载现有片段

It seems like it is creating a new fragment instead loading of existing ones

推荐答案

您的片段被破坏了,因为默认情况下 viewpager 每次移动时一次仅保留一个片段,因此您只需使用

Your fragment get destroyed due to the fact that by default viewpager retain only one fragment at a time while moving around so you can simply use

viewPager.setOffscreenPageLimit(no_of_fragment_to_retain);

viewPager.setOffscreenPageLimit(3); //根据您的情况

因此,当您从4-> 1或3-> 1返回时,将获得片段的先前存储状态.链接到文档

so when you come back from 4->1 or 3->1 you will get the previous stored state of your fragment. link to docs

这篇关于片段显示重置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆