ButterKnife绑定视图与继承问题

时间:2016-03-10 07:20:38

标签: android view dependency-injection butterknife

我已阅读Some issues on github,但仍未找到解决方案。

我的问题是我无法在从BaseActivty

继承的子活动中绑定视图

我的BaseActivity

中的代码
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ViewGroup rootView = (ViewGroup) this.findViewById(android.R.id.content);
        View rootBaseView = getLayoutInflater().inflate(R.layout.activity_base, rootView, false);
        ButterKnife.bind(this, rootBaseView);
        ....
         int childLayoutID = getLayoutResId();
        if (childLayoutID != LayoutConstants.NULL_LAYOUT_ID) {
           View childRootView = getLayoutInflater().inflate(childLayoutID, mLinearLayoutFrameContainer, false);
           mLinearLayoutFrameContainer.addView(childRootView);
       }
        ....
        setContentView(rootBaseView);

所以,我有抽象方法

   public abstract
    @LayoutRes
    int getLayoutResId();

在任何子活动中,我都会返回特定的布局资源。

BaseActivity中的所有视图都被正确注入,但在任何子活动视图中,即使使用@Nullable注释也无法注入,视图在运行时为空。

我该如何解决这个问题。也许有一些解决方法?

附加信息

我尝试过不同的方法,比如

    ButterKnife.bind(this);
    ButterKnife.bind(this,mLinearLayoutFrameContainer);

onCreate方法中的儿童活动。

但仍然相同

但是对于片段我有相同的情况并且有效。

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    ButterKnife.bind(this, view);
    Log.e("FRAGMENT", "ON VIEW CREATED " + getClass().getCanonicalName());

在任何子片段中,我根本不会调用ButterKnife注入方法,仅注释注释的字段,当然我仅在onViewCreated调用后super开始使用视图。

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    setupViews();

0 个答案:

没有答案