30

Web リクエストが終了したときにビューを膨らませるアクティビティがあります。このビューの一部のウィジェットは 1 つの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

メソッド「onClick」に必要な ID XXXXXXXX のビュー「inflated_bt1」が見つかりませんでした。このビューがオプションの場合は、'@Optional' 注釈を追加します。

注釈を使用してビューの一部を設定し@Optional、ビューが膨張したときにそれらを挿入する方法はありますか? または、それを行う別の方法はありますか?

ありがとうございました

4

3 に答える 3

46

@Optional以下のコードに示すように、メソッドの先頭に注釈を追加するだけです。

@Optional
@OnClick({R.id.bt1, R.id.bt2, R.id.inflated_bt1, R.id.inflated_bt2})
public void onClick(View view) {
    // ...
}

R.id.inflated_bt1で使用するレイアウトxmlにない場合がありますActivity。このような場合は、@Optional注釈を使用する必要があります。

@OnClickソースコードで注釈のみを使用すると、YourClass$$ViewInjector次のようになります。

view = finder.findRequiredView(source, 2131230789, "method 'onClick'");
view.setOnClickListener(
  new butterknife.internal.DebouncingOnClickListener() {
    @Override public void doClick(
      android.view.View p0
    ) {
      target.onClick();
    }
  });

ビューが の場合、メソッドfindRequiredViewはスローします。IllegalStateExceptionnull

しかし、追加@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();
      }
    });
}
于 2015-04-01T12:29:09.947 に答える
3
@Nullable
@OnClick({R.id.bt1, R.id.bt2, R.id.inflated_bt1, R.id.inflated_bt2})
public void onClick(View view) {
    // ...
}

Butterknife docs および @AutonomousApps で述べられているように nullable を含めると、常に使用していなくても、ID をいくつでも含めることができます。

appcompact ライブラリを使用していない場合は、注釈サポート ライブラリを忘れずに含めてください。このリンクを確認してくださいサポート注釈

于 2016-06-27T06:59:52.523 に答える