我有一个 Activity ,当网络请求完成时会膨胀 View 。
此 View 的某些小部件必须附加到一个 onClick
方法,所以我有:
@OnClick({R.id.bt1, R.id.bt2, R.id.inflated_bt1, R.id.inflated_bt2})
public void onClick(View view) {
// ...
}
由于 R.id.inflated_bt1
和 R.id.inflated_bt2
在创建应用时不存在,因此会抛出异常建议设置 @Optional
注释。
Required view 'inflated_bt1' with ID XXXXXXXX for method 'onClick' was not found. If this view is optional add '@Optional' annotation.
有没有办法使用 @Optional
注释设置一些 View 并在 View 膨胀时注入(inject)它们?或者,还有其他方法吗?
谢谢
最佳答案
只需在方法顶部添加 @Optional
注释,如下代码所示:
@Optional
@OnClick({R.id.bt1, R.id.bt2, R.id.inflated_bt1, R.id.inflated_bt2})
public void onClick(View view) {
// ...
}
有一种情况是您在 Activity
上使用的布局 xml 中没有 R.id.inflated_bt1
。对于这种情况,您必须使用 @Optional
注释。
当您在 YourClass$$ViewInjector
中仅使用 @OnClick
注释时,源代码如下所示:
view = finder.findRequiredView(source, 2131230789, "method 'onClick'");
view.setOnClickListener(
new butterknife.internal.DebouncingOnClickListener() {
@Override public void doClick(
android.view.View p0
) {
target.onClick();
}
});
当 View 为null
时findRequiredView
方法抛出IllegalStateException
。
但是当您另外使用 @Optional
注释时,生成的代码如下所示
view = finder.findOptionalView(source, 2131230789);
if (view != null) {
view.setOnClickListener(
new butterknife.internal.DebouncingOnClickListener() {
@Override public void doClick(
android.view.View p0
) {
target.onClick();
}
});
}
关于android - 带有可选 id 的 @OnClick 数组 (ButterKnife),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29390695/