8

किसी और को एंड्रॉइड 4.2 में StateListDrawable में एक नया ShapeDrawable() का उपयोग करने में समस्याएं मिली हैं? मैं यह करने के लिए इस्तेमाल किया:Android में एक आकार सूची में डिफ़ॉल्ट आकार का उपयोग करना 4.2

ShapeDrawable bg = new ShapeDrawable(); //default Ctor 
ShapeDrawable hl = new ShapeDrawable(); 
hl.getPaint().setColor(color1); 
bg.getPaint().setColor(color2); 

StateListDrawable s1 = new StateListDrawable(); 
s1.addState(new int[]{android.R.attr.state_pressed}, hl); 
s1.addState(new int[]{}, bg); 

लेकिन यह एंड्रॉयड 4.2 में अब और काम नहीं करता है, फेंक एक nullpointerexception:

java.lang.NullPointerException 
at android.graphics.drawable.ShapeDrawable.mutate(ShapeDrawable.java:387) 
at android.graphics.drawable.DrawableContainer.selectDrawable(DrawableContainer.java:315) 
at android.graphics.drawable.StateListDrawable.onStateChange(StateListDrawable.java:106) 
at android.graphics.drawable.StateListDrawable.addState(StateListDrawable.java:89) 

मैं अपने ShapeDrawable के निर्माता बदलकर समस्या का समाधान हो:

ShapeDrawable bg = new ShapeDrawable(new RectShape()); 
ShapeDrawable hl = new ShapeDrawable(new RectShape()); 

अब यह बहुत अच्छा काम करता है, लेकिन मुझे पसंद है जानना चाहता है कि यह डिफ़ॉल्ट निर्माता के साथ काम नहीं किया =)

अपना समय :)

उत्तर

7

DrawableContainer.selectDrawable() प्राप्ति Android 4.2 में बदल गया है और ShapeDrawable आर्ग के साथ निर्माण का उपयोग करना चाहिए के लिए धन्यवाद। इसलिए mShape.clone() CloneNotSupportedException फेंक और null वापस आ जाएगी

आप डिफ़ॉल्ट निर्माता का उपयोग करते हैं, जब mutate()mShape आह्वान, null है। तो आपको NullPointerException मिलता है।

संबंधित मुद्दे