Java 每当选择相邻选项卡时,是否调用选项卡的onCreateView?

Java 每当选择相邻选项卡时,是否调用选项卡的onCreateView?,java,android,view,tabs,android-tablayout,Java,Android,View,Tabs,Android Tablayout,我遇到了一个奇怪的问题,每当我导航到我的TabLayout中的相邻选项卡时,都会调用onCreateView。这是我的密码: news_feed.java: private static TabLayout tabLayout; @Override public void onCreate(Bundle savedInstanceState) { tabLayout = (TabLayout) findViewById(R.id.tab_layout); tabLayout.a

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

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
的调用只有两个原因: 1.当我们第一次初始化选项卡时 2.如果我们从
onStop
onPause
方法出来

但是,当在实际选项卡旁边的选项卡之间切换时,会像上面一样调用
println
消息,这不是我想要的,因为我不想如此频繁地更新该片段的
视图
:仅在上面的前两个原因期间。有人知道为什么会这样吗?任何帮助都将不胜感激!谢谢

使用setoffScreenPageLimit Android文档:

public void setOffscreenPageLimit(整数限制)

设置应保留到页面两侧的页数 视图层次结构中处于空闲状态的当前页面。除此之外的页面 需要时,将从适配器重新创建限制

默认值设置为1

使用setoffScreenPageLimit Android文档:

public void setOffscreenPageLimit(整数限制)

设置应保留到页面两侧的页数 视图层次结构中处于空闲状态的当前页面。除此之外的页面 需要时,将从适配器重新创建限制

默认值设置为1


首先也是最重要的是,Viewpager的默认工作属性是。 如果您有大约十个选项卡,并且您选择了第二个选项卡

viewpager将创建选项卡2、选项卡1和选项卡3。这样可以在ViewPager之间提供平滑的导航。所以无论您做什么,oncreate视图都会被调用,因为它每次都会重新创建片段

您可以做的一件事是,如果您不想在每次创建选项卡后重新访问选项卡时进行网络呼叫/或从联机获取数据

你可以这样做

在TabLayout活动中保存数据,使用接口创建setdata和getData方法

因此,每当它到达onCreateview时。检查get方法中是否还有任何数据,并将位置传递给该方法


如果存在,则显示该数据,否则进行网络呼叫

首先,Viewpager的默认工作属性是这个。 如果您有大约十个选项卡,并且您选择了第二个选项卡

viewpager将创建选项卡2、选项卡1和选项卡3。这样可以在ViewPager之间提供平滑的导航。所以无论您做什么,oncreate视图都会被调用,因为它每次都会重新创建片段

您可以做的一件事是,如果您不想在每次创建选项卡后重新访问选项卡时进行网络呼叫/或从联机获取数据

你可以这样做

在TabLayout活动中保存数据,使用接口创建setdata和getData方法

因此,每当它到达onCreateview时。检查get方法中是否还有任何数据,并将位置传递给该方法


如果存在,则显示该数据,否则进行网络呼叫

是否为每个选项卡片段打印不同的消息?我之所以问这个问题,是因为您可能将
offscreenPageLimit
设置为1,并且消息与您可能认为的不同选项卡相关。您是否为每个选项卡片段打印不同的消息?我之所以问这个问题,是因为您可能将
offscreenPageLimit
设置为1,并且消息与您可能认为的不同的选项卡相关。您好,我完全理解您的方法,但我实际上使用的是Firebase,因此每次向我的方法添加数据时,数据都会自动异步添加到列表视图中。这有什么办法吗?或者只有当我的应用程序从
onPause
/
onStop
返回时,或者当我的应用程序只是第一次加载时,是否有任何方法可以简单地执行网络调用?嗨,我完全理解你的方法,但我实际上使用的是Firebase,因此每次向我的方法添加数据时,数据将自动异步添加到列表视图中。这有什么办法吗?或者只有当我的应用程序从
onPause
/
onStop
返回时,或者当我的应用程序只是第一次加载时,有没有办法简单地执行网络呼叫?我将尝试将此设置为3,并让您知道!我将尝试将此设置为3并让您知道!