android - 带有可选 id 的 @OnClick 数组 (ButterKnife)

标签 android onclick option-type butterknife

我有一个 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_bt1R.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 为nullfindRequiredView方法抛出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/

相关文章:

javascript - 引入新 DOM 时如何继承 jQuery 效果

java - 我怎样才能安全地向上转型可选?

java lambda - 如何遍历可选列表/可选流

java - android studio,哪个导入语句使用外部库?

javascript - jQuery:可点击行的问题

jquery - 纯点击滚动到

arrays - 计算器程序

java - android.content.res.Resources$NotFoundException : String resource ID #0x0

Android ProgressBar 倒计时

java - fragment 错误android