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您对此有什么例子吗?您有什么例子吗?您找到解决方案了吗?您找到解决方案了吗?