有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java onCreateView,用于在选择相邻选项卡时调用选项卡?

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

新闻联播。爪哇:

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) {

        }
    });
}

公共选项卡。爪哇:

@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.如果我们从onStoponPause方法出来

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


共 (2) 个答案

  1. # 1 楼答案

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

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

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

    你可以这样做

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

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

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

  2. # 2 楼答案

    使用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.