Question

I have a widget View as below:
public class RemoteNumView extends FrameLayout {
how call I use Roboguice just as in RoboActivity? As below:

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

Full code is:

/**
* 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;
}
}

Anyone can HELP?

Was it helpful?

Solution

Solved it by writing custom code. Roboguice is badly written for this purpose.

 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");
                }
            }
        }
    }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top