2015-01-06 14 views
5

Có vẻ như RobotoAttributeSet được tạo và chuyển đến chế độ xem tùy chỉnh sẽ không bao giờ được đọc hoặc xây dựng không chính xác.RoboAttributeSet của Robolectric không bao giờ được đọc

Đây là thử nghiệm của tôi:

ArrayList<Attribute> attributes = new ArrayList<>(); 
    attributes.add(
     new Attribute("com.package.name:attr/CustomButton_inputType", 
      String.valueOf(2), "com.package.name")); // no matter what value I use (2) 

    AttributeSet attrs = 
     new RoboAttributeSet(attributes, Robolectric.application.getResources(), CustomButton.class); 

    CustomButton button = new CustomButton(Robolectric.application, attrs); 

Đây là tôi attr.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <declare-styleable name="CustomButton"> 
    <attr name="inputType" format="enum"> 
     <enum name="text" value="0"/> 
     <enum name="textEmailAddress" value="1"/> 
     <enum name="password" value="2"/> 
    </attr> 
    </declare-styleable> 
</resources> 

Một phần của CustomButton:

private void applyAttributes(Context context, AttributeSet attrs) { 
    TypedArray typedArray = context.getTheme() 
     .obtainStyledAttributes(attrs, R.styleable.CustomButton, 0, 0); 

    try { 
     int typeValue = // is always 0 
      typedArray.getInt(R.styleable.CustomButton_inputType, 0); 
     switch (typeValue) { 
     case 0: 
// do something 
      break; 
     case 1: 
// do something 
      break; 
     case 2: 
      // do something 
      break; 
     default: 
      // just do nothing 
      break; 
     } 
    } finally { 
     typedArray.recycle(); 
    } 
    } 

Vì vậy, không có vấn đề gì giá trị tôi đặt khi chuẩn bị các thuộc tính (nó là 2 trong ví dụ), tôi luôn nhận được 0 cho typeValue.

Tôi có làm gì sai không? Cảm ơn rất nhiều!

+1

Tôi đã cố gắng để thiết lập tương tự tại của tôi và cũng có thể xác nhận rằng styledArray trống. Tuy nhiên tôi thấy rằng nó không phải là trống khi tôi cố gắng thổi phồng xem từ hoạt động và tài nguyên xml. Bạn có cân nhắc về cách thử nghiệm này không? –

+1

Tôi đã tạo một vé https://github.com/robolectric/robolectric/issues/1478 –

Trả lời

3

Sự cố xuất phát từ thử nghiệm của bạn, đặc biệt là giá trị được chuyển đến AttributeSet. Thật vậy, thay vì chuyển trường giá trị của enum, bạn nên chuyển trường tên của enum, vì vậy bạn có thể, sau này trên quan điểm của bạn, nhận trường giá trị được liên kết.

attributes.add(
    new Attribute("com.package.name:attr/CustomButton_inputType", 
     "textEmailAddress", "com.package.name")); 

Hy vọng điều này có thể giúp :) Ngoài ra, đừng ngần ngại đi và nhìn vào my post dealing with custom attributes.

+0

Turhan Oz, không, thông qua tên của trường không giải quyết được vấn đề - nó luôn bằng 0. – Eugene

+0

Lạ. Bạn đang sử dụng phiên bản Robolectric nào? Hãy thử với 2.2 (một trong những chống lại tôi đã kiểm tra) –

+1

Tôi đang sử dụng 'org.robolectric: robolectric: 2.4' – Eugene

0

Hãy thử

attributes.add(
     new Attribute("com.package.name:attr/inputType", 
      String.valueOf(2), "com.package.name")); 
Các vấn đề liên quan