Android 多次调用Fragment onCreateView,以便每次都创建新的Fragment实例

Android 多次调用Fragment onCreateView,以便每次都创建新的Fragment实例,android,android-fragments,android-viewpager,android-viewpager2,fragment-oncreateview,Android,Android Fragments,Android Viewpager,Android Viewpager2,Fragment Oncreateview,我正在尝试在查看页面的页面更改中添加片段。但每次我滚动查看页面时,都会创建新的片段瞬间 public void initializeViewPager(int currentPage, String selectedCardNumber) { currentPosition = currentPage; FragmentPagerAdapter journeyViewPagerAdapter = new ViewPagerAdapter(getSuppor

我正在尝试在查看页面的页面更改中添加片段。但每次我滚动查看页面时,都会创建新的片段瞬间

public void initializeViewPager(int currentPage, String selectedCardNumber) {
    currentPosition = currentPage;
    FragmentPagerAdapter journeyViewPagerAdapter =
            new ViewPagerAdapter(getSupportFragmentManager());


    ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            //Default Implementation
        }

        @Override
        public void onPageSelected(int position) {
            currentPosition = position;
            addFragments(position, selectedCardNumber);
            handleScrollState();
        }

        @Override
        public void onPageScrollStateChanged(int state) {
            //Default Implementation
        }
    };

    viewPager.addOnPageChangeListener(onPageChangeListener);
    initCarousalAdapter();

}
addFragments()方法

getInstance()方法

ViewPagerAdapter.java

public class ViewPagerAdapter extends FragmentPagerAdapter {

private final int[] carousalImages = {R.drawable.ic_po_carousal_banner, 
R.drawable.ic_bt_carousal_banner,
    R.drawable.ic_mt_carousal_banner, R.drawable.ic_po_carousal_banner, 
R.drawable.ic_bt_carousal_banner};

public ViewPagerAdapter(FragmentManager fragmentManager) {
    super(fragmentManager);
}

@Override
public Fragment getItem(int position) {
    CarousalFragment frag = new CarousalFragment();
    CarousalFragmentPresenter.createAndAttach(frag, carousalImages[position]);
    return frag;
}

@Override
public int getCount() {
    return carousalImages != null ? carousalImages.length : 0;
}
}

在视图页面的容器活动中创建片段实例怎么样?这样,它们应该仅在创建容器时创建

public void initializeViewPager(int currentPage, String selectedCardNumber) {
    currentPosition = currentPage;
    FragmentPagerAdapter journeyViewPagerAdapter =
            new ViewPagerAdapter(getSupportFragmentManager());


    ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            //Default Implementation
        }

        @Override
        public void onPageSelected(int position) {
            currentPosition = position;
            addFragments(position, selectedCardNumber);
            handleScrollState();
        }

        @Override
        public void onPageScrollStateChanged(int state) {
            //Default Implementation
        }
    };

    viewPager.addOnPageChangeListener(onPageChangeListener);
    initCarousalAdapter();

}
编辑:添加示例代码。 例如:


在视图页面的容器活动中创建片段实例怎么样?这样,它们应该仅在创建容器时创建

public void initializeViewPager(int currentPage, String selectedCardNumber) {
    currentPosition = currentPage;
    FragmentPagerAdapter journeyViewPagerAdapter =
            new ViewPagerAdapter(getSupportFragmentManager());


    ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            //Default Implementation
        }

        @Override
        public void onPageSelected(int position) {
            currentPosition = position;
            addFragments(position, selectedCardNumber);
            handleScrollState();
        }

        @Override
        public void onPageScrollStateChanged(int state) {
            //Default Implementation
        }
    };

    viewPager.addOnPageChangeListener(onPageChangeListener);
    initCarousalAdapter();

}
编辑:添加示例代码。 例如:


您应该在
getItem
中编写切换案例,并且不需要
bundle
和fragment事务,因为
getItem
本身返回选定的
fragment
并将与
ViewPager
绑定

@Override
public Fragment getItem(int position) {
switch (position) {
    case 0:
        CarousalFragment();
        break;
    case 1:
        OffersFragmentOne.getInstance();
        break;

    case 2:
        OffersFragmentTwo.getInstance();

        break;

    case 3:
        OffersFragmentThree.getInstance();
        break;
    default:
        //Default Implementation
}
}
OnPageChangeListener
只需提供所选和滚动项目或片段的位置,因此无需从
onPageSelected

ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        //Default Implementation
    }

    @Override
    public void onPageSelected(int position) {

    }

    @Override
    public void onPageScrollStateChanged(int state) {
        //Default Implementation
    }
};

您应该在
getItem
中编写切换案例,并且不需要
bundle
和fragment事务,因为
getItem
本身返回选定的
fragment
并将与
ViewPager
绑定

@Override
public Fragment getItem(int position) {
switch (position) {
    case 0:
        CarousalFragment();
        break;
    case 1:
        OffersFragmentOne.getInstance();
        break;

    case 2:
        OffersFragmentTwo.getInstance();

        break;

    case 3:
        OffersFragmentThree.getInstance();
        break;
    default:
        //Default Implementation
}
}
OnPageChangeListener
只需提供所选和滚动项目或片段的位置,因此无需从
onPageSelected

ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        //Default Implementation
    }

    @Override
    public void onPageSelected(int position) {

    }

    @Override
    public void onPageScrollStateChanged(int state) {
        //Default Implementation
    }
};

您在
addFragments()
中创建新实例时,每次都必须在活动或适配器中创建一个实例,并再次重用该实例,并且againI使用getInstance()方法,该方法是静态的,并且只创建一次片段实例。或者@HanzalaCan有没有其他方法可以共享getInstance方法的代码?共享
ViewPagerAdapter
code我注意到你没有使用任何适配器来查看寻呼机你正在
addFragments()
method中手动替换片段你正在
addFragments()中创建新实例
每次都必须创建一个实例,并在活动或适配器中保留并再次重用该实例,而且我使用getInstance()方法,该方法是静态的,只创建一次片段实例。或者@HanzalaCan有没有其他方法可以共享getInstance方法的代码?共享
ViewPagerAdapter
code我注意到您没有使用任何用于查看寻呼机的适配器您正在
addFragments()中手动替换片段
method您对此有什么例子吗?您有什么例子吗?您找到解决方案了吗?您找到解决方案了吗?