美文网首页
避免ID冲突或重复

避免ID冲突或重复

作者: CaiBird | 来源:发表于2016-10-25 10:55 被阅读492次
问题:

在Fragment或Activity中发生restoreSavedState操作时(比如旋转屏幕),页面中的自定义View,如果有自己复写onSaveInstanceState方法,且该自定义View是以addView()的形式添加的,就有可能造成以下报错:
java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class *.waveswiperefreshlayout.WaterWave$SavedState instead. This usually happens when two views of different type have the same id in the same hierarchy. This view's id is id/swipe_refresh_layout.

解决办法:

addView()之后,手动设置唯一ID,代码如下:

private void setWaterWaveId() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        mWaterWave.setId(View.generateViewId());
    } else {
        mWaterWave.setId(AppUtils.generateViewId());
    }
}

private static final AtomicInteger sNextGeneratedId = new AtomicInteger(1);
/**
 * Generate a value suitable for use in View.setId(int).
 * This value will not collide with ID values generated at build time by aapt for R.id.
 *
 * @return a generated ID value
 */
public static int generateViewId() {
    for (;;) {
        final int result = sNextGeneratedId.get();
        // aapt-generated IDs have the high byte nonzero; clamp to the range under that.
        int newValue = result + 1;
        if (newValue > 0x00FFFFFF) newValue = 1; // Roll over to 1, not 0.
        if (sNextGeneratedId.compareAndSet(result, newValue)) {
            return result;
        }
    }
}
参考:

Android: View.setID(int id) programmatically - how to avoid ID conflicts?
Wrong State Class,expecting View State but received class...异常解决思路之一
Wrong state class, expecting View State but

相关文章

  • 避免ID冲突或重复

    问题: 在Fragment或Activity中发生restoreSavedState操作时(比如旋转屏幕),页面中...

  • twitter的snowflake算法

    snowflake算法是twitter提出的一个用来生成不重复ID的算法,用于解决ID冲突。适用于:先插数据,然后...

  • 一个分布式ID的生成器-雪花算法

    上面雪花算法生成分布式ID的原理和实现,简单理解就是利用时间戳从时间跨度上来避免ID的重复,利用机器的编号来避免集...

  • 成长笔记 | 人生需要寻找前提,从剧本创作谈起

    无论是文学作品,还是戏剧或影视作品,无一不需要冲突。 对于一部电影或戏剧来说,冲突是不可避免的,冲突过后人物的改变...

  • 【0818晨读感悟】化解冲突三步骤

    在与他人的交往、相处中,总会无可避免地出现一些矛盾或冲突。面对冲突,我们如何化解? 《解决冲突的关键技巧:如何增加...

  • 涨知识:结构性矛盾和摩擦性矛盾

    今天学到两个新词,感觉对整个人生都看的更开了。 结构性矛盾:不可避免的冲突,非此即彼 摩擦性矛盾:可避免的冲突,或...

  • 避免重复

    我怎么如此幸运-99将帅挑战赛75-重生255-戴红霞(2021-05-18) 我怎么如此幸运-避免重复 1.我怎...

  • 解决 js的匿名函数与jquery的冲突

    冲突代码 function $(id){ return document.getElementById(id); ...

  • 在职场上与人高效沟通的四种方法

    无论是对谁做了什么的误解,观念的冲突或人际关系的纠结,在任何工作场所都会不可避免地发生冲突。 但是,冲突的根源通常...

  • js 模块

    模块的来源 最早的模块机制出现在node,即common js, 因为后端开发比较的复杂,为了避免命名重复产生冲突...

网友评论

      本文标题:避免ID冲突或重复

      本文链接:https://www.haomeiwen.com/subject/nndruttx.html