java - 每当选择相邻选项卡时都会调用选项卡的 onCreateView 吗?

标签 java android view tabs android-tablayout

我遇到了一个奇怪的问题,onCreateView每次我导航到 TabLayout 中的相邻选项卡时都会被调用。这是我的代码:

news_feed.java:

private static TabLayout tabLayout;

@Override
public void onCreate(Bundle savedInstanceState) {
    tabLayout = (TabLayout) findViewById(R.id.tab_layout);
    tabLayout.addTab(tabLayout.newTab().setText("Public"));
    tabLayout.addTab(tabLayout.newTab().setText("Friends"));
    tabLayout.addTab(tabLayout.newTab().setText("My Tabs"));
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

    final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
    final PagerAdapter adapter = new PagerAdapter
            (getSupportFragmentManager(), tabLayout.getTabCount());
    viewPager.setAdapter(adapter);
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });
}

PublicTab.java:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    System.out.println("Creating a new view");
    fragmentView = inflater.inflate(R.layout.public_tab, container, false);
    progressOverlay = fragmentView.findViewById(R.id.progress_overlay);
    AndroidUtils.animateView(progressOverlay, View.VISIBLE, 0.9f, 200);
    getPublicPosts(progressOverlay, fragmentView);
    return fragmentView;
}

我还有另外 3 个与 PublicTab.java 完全相同的选项卡但布局不同。我不知道为什么onCreateView被如此频繁地调用。我认为在生命周期中,onCreateView仅因 2 个原因被调用: 1.当我们第一次初始化选项卡时 2.如果我们从onStop出来或onPause方法。

但是,当在实际选项卡旁边的选项卡之间切换时,println消息的调用方式如上面所示,这不是我想要的,因为我不想更新 View该 fragment 如此频繁地出现:仅在上述前两个原因期间。有谁知道为什么会发生这种情况?任何帮助,将不胜感激!谢谢!

最佳答案

使用setoffScreenPageLimit Android 文档:

public void setOffscreenPageLimit (int limit)

Set the number of pages that should be retained to either side of the current page in the view hierarchy in an idle state. Pages beyond this limit will be recreated from the adapter when needed

The default value is set to 1.

关于java - 每当选择相邻选项卡时都会调用选项卡的 onCreateView 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36056371/

相关文章:

android - 如何解决无法将 fragment 转换为上下文错误?

sql - View 如何与表同步

oracle - 没有在带有 WHERE CONTAINS 子句的 View 上使用索引

view - SwiftUI - 如何更改 View 的背景颜色?

java - 将链接值传递给 bean

java - 从 Hibernate native 查询的结果中获取动态生成的列名

java - getFailedLoginAttempts() 函数在 Vaadin 的 appfoundation 中没有任何意义

java - 为什么我的多线程程序是顺序执行的?

android - Android-如何使用Recyclerview滑动TabLayout中的选项卡

java - 在不打开日历的情况下添加日历事件