【问题标题】:conflict between fragments inside a viewpager浏览器内的片段之间的冲突
【发布时间】:2018-05-06 08:44:50
【问题描述】:

每当我滑动移动到下一个片段时,另一个片段中的代码就会执行,但布局已正确加载并且代码也会执行,但它也会执行另一个片段的代码

例如: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;
    }
}


}

【问题讨论】:

  • mViewPager.setOffscreenPageLimit(0);,这会让viewPager只加载当前的孩子
  • @AshishKumar 不行,页数限制总是至少1个,而且他可能会收到警告说它太小了
  • 试过了,没用

标签: android android-fragments android-viewpager


【解决方案1】:

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

您可以在您的片段中使用此方法,并在其中放入您希望仅在片段可见时执行的内容:

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

    }
}

【讨论】:

  • @Ezio 使用这个方法,它是一个回调,只有在片段可见时才会调用这个方法。所以你有3个片段,你在片段B上,片段C的所有代码都会被执行,但是如果你把一些代码放在setUserVisibleHint它只会在片段实际出现在屏幕上时执行。
  • 非常感谢你是天才,如果可以的话 +100 万,这只是一个新帐户
  • @Ezio 不客气 :) 您可以通过单击旁边的复选标记将答案标记为已接受 :)
  • 虽然当我在加载的第一个片段中使用此回调时,没有任何指令被执行(相反它给了我错误)
  • @Ezio 我发现这篇文章的地址是exact problem,请尝试改用viewPager.addOnPageChangedListener
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-19
  • 1970-01-01
相关资源
最近更新 更多