Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ViewPager中的片段未正确设置状态_Android_Checkbox_Android Viewpager_Fragment_State - Fatal编程技术网

Android ViewPager中的片段未正确设置状态

Android ViewPager中的片段未正确设置状态,android,checkbox,android-viewpager,fragment,state,Android,Checkbox,Android Viewpager,Fragment,State,我对包含多个片段的ViewPager有一个奇怪的问题。每个片段显示一个问题和多个可能的答案(复选框)。当复选框状态更改时,它的值存储在hashmap中,这样,如果用户使用ViewPager滑开然后再滑回,则可以恢复每个复选框的选中/未选中状态 在onCreateView()中: 我将省略布局文件,因为它们很琐碎。当在片段之间分页和点击复选框时,应用程序一开始运行良好。数据模型已正确更新 当我这样做时,问题出现了: 选中复选框,使其变为“选中” 移开两页(这样原始片段就会被销毁) 移回原始片段位置

我对包含多个片段的ViewPager有一个奇怪的问题。每个片段显示一个问题和多个可能的答案(复选框)。当复选框状态更改时,它的值存储在hashmap中,这样,如果用户使用ViewPager滑开然后再滑回,则可以恢复每个复选框的选中/未选中状态

在onCreateView()中:

我将省略布局文件,因为它们很琐碎。当在片段之间分页和点击复选框时,应用程序一开始运行良好。数据模型已正确更新

当我这样做时,问题出现了:

  • 选中复选框,使其变为“选中”
  • 移开两页(这样原始片段就会被销毁)
  • 移回原始片段位置,以便重新创建它
  • 发生的情况是:从我的数据模型中正确地设置了状态(即,设置为“选中”),但在onCheckedChanged上立即发生后续调用,并且复选框设置不正确(即,设置为“未选中”)。有趣的是,它总是设置列表中最后一个复选框的值

    这就好像Android试图记住复选框的状态并自动设置它们,但是因为它们都有相同的ID(从xml中膨胀),所以它只从列表中的最后一个复选框中获取值。我没有使用onSaveInstanceState或类似的东西,所以我不明白为什么会自动重置复选框。我可以阻止Android以这种方式更改我的复选框状态吗

    换句话说,在步骤1(选中复选框)之后,我看到

    但是在步骤3我看到了(在最初从数据模型设置为“true”之后)

    …此更改立即发生,无需单击复选框


    感谢您的帮助。

    a。尝试调用
    setSaveEnabled(false)打开复选框

    b。尝试添加:

    answerCheckButton.setOnCheckedChangeListener(null);
    
    以前

     answerCheckButton.setChecked(isChecked);
    

    然后添加新的侦听器。

    您确定在步骤1之后对您的模型所做的更改会被持久化吗?我对交换机也有同样的问题。setSaveEnabled()确实解决了这个问题。我已经尝试在检查状态(您的(b)选项)之后添加侦听器,但没有成功。setSaveEnabled选项很有趣,我将尝试一下。我曾假设,除非您显式地实现代码,否则不会保存任何状态。实际上,自从我发布之后,我找到了一个解决方法:将侦听器和setChecked代码放在onStart中,而不是放在onCreateView中。这有效地覆盖了Android在生命周期后期设置状态时尝试的任何状态更改。我尝试了setSaveEnabled(false)-效果非常好。谢谢你的帮助!我遇到了完全相同的问题,这让我发疯,因为我不知道发生了什么!上帝为你们互联网上的人们。非常感谢(千次),我把代码setSaveEnables(false)工作得很好。我感到困惑和恼火,为什么它没有被正确检查。感谢你们的帮助我不敢相信这只有4张(现在我有5张)投票!这救了我的命,谢谢!
    07-02 14:42:10.474: I/System.out(21487): onCheckedChanged Q4A1 false
    
    answerCheckButton.setOnCheckedChangeListener(null);
    
     answerCheckButton.setChecked(isChecked);