2013-12-12 60 views
1

我有如下的窗口小部件查看:
public class RemoteNumView extends FrameLayout {
怎麼稱呼我用Roboguice就像RoboActivity?如下圖所示: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作爲更好的解決方案。 –