📜  仅从 Android N (--min-api 24) 开始支持 atic 接口方法: void butterknife.Unbinder.lambda$static$0()] (1)

📅  最后修改于: 2023-12-03 14:49:15.016000             🧑  作者: Mango

ButterKnife对API 24以上版本的支持

ButterKnife是一个Android中常用的依赖注入框架,可以绑定控件、监听器、方法等。然而,在API版本低于24的Android系统中使用ButterKnife时,若使用了@BindView@OnClick等注解,则会报错。

这是因为ButterKnife在API 24以下版本的Android系统中不能正确解析静态绑定语法,会出现“找不到类”的情况。因此,在API版本低于24的Android系统中使用ButterKnife时,我们需要使用动态绑定方法——butterknife.ButterKnife.bind(this);

public class ExampleActivity extends AppCompatActivity {
    @BindView(R.id.title_text)
    TextView titleText;
    @BindView(R.id.subtitle_text)
    TextView subtitleText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_example);
        ButterKnife.bind(this);
    }
}

但是,仅从Android N(API版本24)开始,ButterKnife也支持静态绑定语法。因此,在API版本高于24的Android系统中,也可以使用静态绑定语法:

public class ExampleActivity extends AppCompatActivity {
    @BindView(R.id.title_text)
    TextView titleText;
    @BindView(R.id.subtitle_text)
    TextView subtitleText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_example);
        // 只有API版本高于或等于24的Android系统才会执行下面的代码
        ButterKnife.bind(this);
    }
}

需要注意的是,如果您的应用需要支持低于24的Android系统,则在使用ButterKnife时需要进行条件判断。判断代码应该类似于这样:

private boolean canBind() {
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_example);

    if (canBind()) {
        ButterKnife.bind(this);
    }
}

总之,在使用ButterKnife时,需根据不同的Android系统版本使用不同的绑定方法,才能保证应用程序的正常运行。

仅从 Android N (--min-api 24) 开始支持 atic 接口方法: void butterknife.Unbinder.lambda$static$0()]