android 片段更改时,FragmentStateAdapter未调用createfragment函数

xt0899hw  于 2023-05-21  发布在  Android
关注(0)|答案(1)|浏览(311)

我对FragmentStateAdapter中的createFragment方法有一个小问题。我希望每当ViewPager2中的片段发生变化时都会调用createFragment。但是,createFragment仅在发生第一个片段更改时调用。那么createFragment方法将不再被调用。
我的代码:

@NonNull
    @Override
    public Fragment createFragment(int position) {
        switch (position)
        {
            case 0:
            {
                myTextView.setText("0");
                return discover_page;
            }
            case 1:
            {
                myTextView.setText("1");
                return top_page;
            }
            case 2:
            {
                myTextView.setText("2");
                return friends_page;
            }
            default: return null;
        }
    }

在这段代码中,myTextView在第一次片段更改发生时被设置为“2”,并且永远不会变成其他值,即使片段正在更改。有人知道为什么吗?

ws51t4hk

ws51t4hk1#

因为碎片并不是一直都在(重新)创建。它们被创建然后被重复使用。为了让你的textview适当地改变文本,你需要使用OnPageChangeCallback
就像这样:

viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            super.onPageScrolled(position, positionOffset, positionOffsetPixels);
        }

        @Override
        public void onPageSelected(int position) {
            super.onPageSelected(position);

            //your code
            switch (position)
            {
                case 0:
                {
                    myTextView.setText("0");
                    //return discover_page;
                }
                case 1:
                {
                    myTextView.setText("1");
                    //return top_page;
                }
                case 2:
                {
                    myTextView.setText("2");
                    //return friends_page;
                }
                //default: return null;
            }
        }

        @Override
        public void onPageScrollStateChanged(int state) {
            super.onPageScrollStateChanged(state);
        }
    });

相关问题