android–ViewPager里面的片段设置状态不正确

android–ViewPager里面的片段设置状态不正确,第1张

概述我有一个包含多个片段的ViewPager的奇怪问题.每个片段都显示一个带有多个可能答案的问题(复选框).当更改复选框状态时,它的值存储在散列映射中,这样,如果用户使用ViewPager滑出然后再返回,则可以恢复每个复选框的已选中/未选中状态.在onCreateView()中:ViewGroupanswersRow

我有一个包含多个片段的VIEwPager的奇怪问题.每个片段都显示一个带有多个可能答案的问题(复选框).当更改复选框状态时,它的值存储在散列映射中,这样,如果用户使用VIEwPager滑出然后再返回,则可以恢复每个复选框的已选中/未选中状态.

在onCreateVIEw()中:

    VIEwGroup answersRow = (VIEwGroup) vIEw.findVIEwByID(R.ID.answers_row);    //loop over each answer and add a checkBox    for(Answer answer : answers) {        VIEw answerVIEw = inflater.inflate(R.layout.vIEw_answer, null);        final CheckBox answerCheckbutton = (CheckBox) answerVIEw.findVIEwByID(R.ID.answerCheckbutton);        //set correct value for answer based on datamodel        String tagname = "Q" + question.getNumber() + "A" + answer.getNumber();        Integer answerValue = getDataModel().getAnswer(tagname);        boolean isChecked = (answerValue != null && answerValue > 0);        System.out.println("answer " + answerCheckbutton.getTag() + " " + isChecked);        answerCheckbutton.setTag(tagname);        answerCheckbutton.setChecked(isChecked);        answerCheckbutton.setonCheckedchangelistener(new OnCheckedchangelistener() {            @OverrIDe            public voID onCheckedChanged(Compoundbutton buttonVIEw, boolean isChecked) {                System.out.println("onCheckedChanged " + buttonVIEw.getTag() + " " + isChecked);                String answerTag = (String) buttonVIEw.getTag();                Integer answerValue = isChecked ? 1 : 0;                getDataModel().setAnswer(answerTag, answerValue);            }        });        answersRow.addVIEw(answerVIEw);    }

我将省略布局文件,因为它们是微不足道的.当片段之间进行分页并点击复选框时,应用程序最初工作正常.数据模型已正确更新.

当我这样做时出现问题:

>选中一个复选框,使其变为“已选中”
>移走两页(以便原始片段被破坏)
>移回原始片段位置,以便重新创建.

会发生什么:状态是从我的数据模型正确设置(即“检查”),但随后在onCheckedChanged上发生立即后续调用,并且复选框设置不正确(即“未选中”).有趣的是,它始终设置列表中最后一个复选框的值.

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

换句话说,在步骤1(选择复选框)之后,我明白了

07-02 14:42:07.334: I/System.out(21487): onCheckedChanged Q4A1 true

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

07-02 14:42:10.474: I/System.out(21487): onCheckedChanged Q4A1 false

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

任何帮助赞赏.

解决方法:

一个.尝试调用setSaveEnabled(false);在CheckBox上.

湾尝试添加:

answerCheckbutton.setonCheckedchangelistener(null);

之前

 answerCheckbutton.setChecked(isChecked);

然后添加新的监听器.

总结

以上是内存溢出为你收集整理的android – ViewPager里面的片段设置状态不正确全部内容,希望文章能够帮你解决android – ViewPager里面的片段设置状态不正确所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1110259.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存