我创建了一个扩展 ViewGroup 的类。此 MyCustomViewGroup 类的功能之一是充当扩展 Button 的嵌套类 MyButton 的容器。
我以正常方式从自定义 AttributeSet 设置 MyCustomViewGroup 的自定义属性。其中一个属性定义了用于 MyButton 嵌套类实例背景的 StateListDrawable。我将它存储在一个类变量 mMyButtonBackground 中。
public class MyCustomViewGroup extends ViewGroup {
private Drawable mMyButtonBackground;
...
每次我在 MyCustomViewGroup 中创建 MyButton 的新实例时,我都会将其设置为背景。
MyButton myButton = new MyButton(context);
myButton.setBackground(mMyButtonBackground);
在运行时,StateListDrawable 似乎只适用于最近添加的 MyButton 实例。
例如,假设我在 MyCustomViewGroup 中创建了 4 个 MyButton 实例。如果我单击 MyButton 数字 4,它的背景会发生在 StateListDrawable 中定义的变化。如果我单击 MyButton 1 到 3,它们的背景不会改变,但 MyButton 数字 4 会改变。
从逻辑上讲,这表明这是一个可变性问题。所有 MyButton 实例共享存储在 mMyButtonBackground 中的相同 StateListDrawable。考虑到这一点,我尝试过:
MyButton myButton = new MyButton(context);
Drawable myButtonBackground = mMyButtonBackground.mutate();
myButton.setBackground(myButtonBackground);
但这并没有解决问题。我还尝试将其专门转换为 StateListDrawable:
MyButton myButton = new MyButton(context);
StateListDrawable myButtonBackground = (StateListDrawable)mMyButtonBackground.mutate();
myButton.setBackground(myButtonBackground);
这也没有解决问题。在我试图解决这个问题的研究中,我已经阅读了 Romain Guy 关于 Drawable mutation 的这篇文章。我会认为由于 StateListDrawable 是 Drawable 的子类,我应该能够应用相同的方法,但我似乎无法让它工作。我错过了什么?