gpt4 book ai didi

android - ViewPager 行为,它不会破坏旧 fragment

转载 作者:行者123 更新时间:2023-12-02 17:11:09 25 4
gpt4 key购买 nike

我想了解有关 ViewPager 行为的更多信息。我有一个 FragmenPagerAdapter :

public class DatePagerAdapter extends FragmentPagerAdapter {

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


@Override
public Fragment getItem(int position) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, 1);
int offset = position - 100;
calendar.add(Calendar.MONTH, offset);
// Toast.makeText(TestActivity.this,(calendar.get(Calendar.MONTH)+1)
Log.v("CALENDAR", "" + position);
TestFragmentDate date = TestFragmentDate.newInstance(TestActivity.this, calendar);
return date;
}

@Override
public int getCount() {
return 200;
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
return super.instantiateItem(container, position);
}
}

以及我的 Activity 中的代码:

adapter = new DatePagerAdapter(getSupportFragmentManager());
MinFragmentPagerAdapter wrapperMin = new MinFragmentPagerAdapter(getSupportFragmentManager());
wrapperMin.setAdapter(adapter);
PagerAdapter wrapper = new InfinitePagerAdapter(wrapperMin);
viewPager = (ViewPager) this.findViewById(R.id.pager);
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(100);
viewPager.addOnPageChangeListener(this);

根据我的前辈的说法,ViewPager总是绘制3个 fragment ,并不断重用它们。例如,首先我在位置上有 View :99、100、101如果我向右滚动,它将销毁 99 并创建 102,依此类推。但是,当我在函数getItem处调试时,一开始它确实遇到了这个函数,但是当我向右滚动5或6页,然后回滚时,它并没有遇到getItem,在应该被销毁的位置。

有人可以帮我解释一下 ViewPager 的行为吗?谢谢。

最佳答案

Google 指南说:

FragmentPagerAdapter

This version of the pager is best for use when there are a handful of typically more static fragments to be paged through, such as a set of tabs. The fragment of each page the user visits will be kept in memory, though its view hierarchy may be destroyed when not visible. This can result in using a significant amount of memory since fragment instances can hold on to an arbitrary amount of state. For larger sets of pages, consider FragmentStatePagerAdapter.

关于FragmentStatePagerAdapter:

This version of the pager is more useful when there are a large number of pages, working more like a list view. When pages are not visible to the user, their entire fragment may be destroyed, only keeping the saved state of that fragment. This allows the pager to hold on to much less memory associated with each visited page as compared to FragmentPagerAdapter at the cost of potentially more overhead when switching between pages.

结论:使用FragmentStatePageAdapter就你而言,那就是你不想要 Fragment附在您的ViewPager被摧毁。

您还可以使用viewpager.setOffscreenPageLimit(<no of fragments>);限制在空闲状态下有多少页面将保持在屏幕外。

关于android - ViewPager 行为,它不会破坏旧 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34039905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com