viewpager中的片段之间的冲突

时间:2018-05-05 20:46:25

标签: android android-fragments android-viewpager

每当我滑动移动到下一个片段时,另一个片段中的代码被执行,因为布局正确加载并且代码也可以执行另一个片段的代码

例如:3个片段A,b,c

当我从片段A滑动到片段b时:片段b布局和代码被执行但是片段c代码

当我从b滑动到c时,只有片段c的代码和布局,所以它正确执行

所以问题是如果它不是它调用下一个代码的最后一个片段

这是我的main_activty代码

公共类Main2Activity扩展了AppCompatActivity {

private SectionsPagerAdapter mSectionsPagerAdapter;

private ViewPager mViewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);


    // Create the adapter that will return a fragment for each of the three
    // primary sections of the activity.
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.container);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);

    mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));


}



public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                home h1 = new home();
                return h1;

            case 1:
                status st = new status();
                return st;

            case 2:
                info info = new info();
                return info;

            case 3:
                setting set = new setting();
                return set;

        }
        return null;
    }

    @Override
    public int getCount() {

        return 4;
    }
}


}

1 个答案:

答案 0 :(得分:0)

您的SectionsPagerAdapter正在扩展FragmentStatePagerAdapter,其默认行为是出于优化原因预先加载至少一个页面。您可以使用setOffscreenPageLimit设置预加载的片段数,但必须至少为一个。

您可以在片段中使用此方法,只有在片段可见后才能放入您想要执行的内容:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {

    }
}