2013-12-12 3 views
1

에 주입? 아래로 :roboguice 내가 아래 위젯보기가 고객

@InjectView(R.id.btn_remote_control_num_0) 
private TextView mText; 

전체 코드는 다음과 같습니다

/** 
* Created by bbcv on 13-12-12. 
*/ 

public class RemoteNumView extends FrameLayout { 
private IService mService; 

@InjectView(R.id.btn_remote_control_num_0) 
private TextView mText; 

public RemoteNumView(Context context) { 
    super(context); 
    /// 
    addView(LayoutInflater.from(context).inflate(R.layout.v_remote_control_fun,null)); 
} 

public RemoteNumView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public RemoteNumView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 

public void setService(IService service){ 
    mService = service; 
} 
} 

사람은 도와 드릴까요?

답변

1

맞춤 코드를 작성하여 해결했습니다. Roboguice는이 목적으로 잘못 작성되었습니다.

protected void injectViews() { 
    for (Field field : this.getClass().getDeclaredFields()) { 
     if (field.isAnnotationPresent(InjectView.class)) { 
      if (Modifier.isStatic(field.getModifiers())) { 
       throw new UnsupportedOperationException("Views can't be staticaly assigned."); 
      } else { 
       if (View.class.isAssignableFrom(field.getType())) { 
        try { 
         final InjectView injectView = field.getAnnotation(InjectView.class); 
         ; 
         final int id = injectView.value(); 
         View view = findViewById(id); 
         if ((view == null) && Nullable.notNullable(field)) { 
          throw new NullPointerException(String.format("Can't inject null value into %s.%s when field is not @Nullable", field.getDeclaringClass(), field.getName())); 
         } 
         field.setAccessible(true); 
         field.set(this, view); 
        } catch (IllegalAccessException e) { 
         throw new IllegalStateException(e); 
        } 
       } else { 
        throw new UnsupportedOperationException("Need view type to assign"); 
       } 
      } 
     } 
    } 
+0

그리고 더 나은 솔루션으로 ButterKnife를 사용하게되었습니다. –