当前位置: 首页 > 知识库问答 >
问题:

viewpage2中丢失片段

查修谨
2023-03-14

当我在日历视图上选择一个月时,或者当我旋转屏幕时,我丢失了“暂停”片段。但是当我开始滑动时,所有片段都再次正常运行。我想这与我的应用程序的生命周期有关,但我很难找到如何解决这个问题。

我也在使用

            android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"

在我的清单中,以保持我的一个碎片上的按钮状态。

我错过了什么?

共有2个答案

柯鸿振
2023-03-14

最后,这:

binding.activityMainViewpager.setOffscreenPageLimit(2);

已经解决了我的问题的其余部分^^”

索吕恭
2023-03-14

您可以在android中使用savedInstanceStateviewModel(我建议第一个使用)。因此,viewPager有viewPager。onPageChangeListener(参考此SO答案https://stackoverflow.com/a/11294494/12649627). 所以,基本上您的活动或片段应该如下所示

Java解决方案:

public class MyFragment extends Fragment {
    private int pagerPosition = 0;
    private final static String PAGER_POSITION_TAG = "PAGER_POSITION_TAG";
    private ViewPager2 myViewPager;
    private ViewPager2.OnPageChangeCallback callback = new ViewPager2.OnPageChangeCallback() {
        @Override
        public void onPageSelected(int position) {
            super.onPageSelected(position);
            pagerPosition = position;
        }
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        if (savedInstanceState != null) {
            pagerPosition = savedInstanceState.getInt(PAGER_POSITION_TAG, 0);
        }
        return inflater.inflate(R.layout.my_fragment, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        myViewPager = view.findViewById(R.id.my_view_pager);
        myViewPager.setCurrentItem(pagerPosition);
        myViewPager.registerOnPageChangeCallback(callback);
    }

    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt(PAGER_POSITION_TAG, pagerPosition);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        myViewPager.unregisterOnPageChangeCallback(callback);
    }
}

注:我发现有一种称为registerOnPageChangeCallbackunregisterOnPageChangeCallback的方法。所以我用了那些。忽略以上代码。

 类似资料:
  • 我在AWS EC2上运行3个节点集群,我的一个节点崩溃了,重新启动后,我看到2900个未分配的碎片和集群状态为红色。 我将索引配置为有5个碎片和1个副本--我不明白为什么重新启动后碎片不能从副本中恢复。 我尝试使用elasticsearch重新路由API https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-

  • 问题内容: 我今天犯了升级Eclipse的错误,现在无法启动新的Android项目。 我收到消息Proguard.cfg(找不到文件)。 我似乎在哪里找不到这东西?是否有可能摆脱它我在这个项目中不需要混淆… 谢谢 问题答案: 如果您确实不需要Proguard来混淆发行版,则可以从项目根文件夹的default.properties文件中删除以下行: proguard.config = proguar

  • 我有一个活动,它在onCreate中加载一个片段(比如Fragment1)。当用户按下Fragment1中的按钮时,我用一个新片段替换Fragment1,比如Fragment2。问题是,在Fragment2中更改方向时,会重新创建活动,并显示Fragment1而不是Fragment2。(因为我在onCreate中创建了Fragment1)我如何坚持Fragment2并在方向更改时保持其状态? 谢谢

  • 问题内容: 我想在我的网站上使用,但得到以下信息: 我试过打印。输出以下内容: 谁能帮助我找到或建议替代方案? 问题答案: 从文档中: 页面(如果有的话)的地址,该页面将用户代理引至当前页面。这是由用户代理设置的。并非所有的用户代理都将设置此功能,有些用户代理提供了将HTTP_REFERER修改为功能的功能。简而言之,它不能真正被信任。

  • 问题内容: 我目前正在一个小项目上使用RPi 3B(最新的Raspbian Jessie),该项目涉及播放简短的.mp4文件。由于Pygame似乎支持播放.mpg文件,因此我将视频转换为该格式。 但是,当我尝试导入movie模块时,出现了常见的python导入错误: 经过研究,我发现其他人也遇到了与此处所述相同的问题。我真的不知道是否有解决方案,或者我在RPi上有什么替代方案。 Pygame,py

  • 我厌倦了在我的代码中找到实际问题。我正在尝试在我的 android 项目中使用 FCM。我按照 firebase 控制台中给出的分步程序来激活我的项目中的服务,但我遇到了类似“错误”的问题:任务“:app:processDebugGoogleServices”执行失败。 文件 google-services.json 丢失。没有它,Google 服务插件将无法运行。搜索到的位置:C:\Users\