конфликт между фрагментами в окне просмотра - PullRequest
0 голосов
/ 05 мая 2018

всякий раз, когда я провожу пальцем, чтобы перейти к следующему фрагменту, код внутри другого фрагмента выполняется, пока компоновка загружается правильно и код также, но он также выполняет код другого фрагмента

например: 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 голосов
/ 06 мая 2018

Ваш SectionsPagerAdapter расширяет FragmentStatePagerAdapter, и его поведение по умолчанию заключается в предварительной загрузке хотя бы одной страницы для оптимизации. Вы можете установить количество предварительно загружаемых фрагментов, используя setOffscreenPageLimit, но оно должно быть не менее одного.

Вы можете использовать этот метод в своем фрагменте и поместить туда что-то, что вы хотите выполнить только после того, как фрагмент станет видимым:

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

    }
}
...