検索

ホームページ  >  に質問  >  本文

android - AS中Module中没法使用Butterknife.有什么好的替代?

说是Module中的R文件下的id不是final的。然后Butterknife就不行。。。
估计别的注解类型的也不好使吧。。。于是乎有什么办法么。。

详见:https://github.com/JakeWharton/butterknife/issues/100

以下是作者JakeWharton在14年12月的原话。。。

Yes this is not supported. This is a tradeoff between ease-of-use and what I tolerate as a sane API.

The only way to accomplish something like this is to allow string values like this:

@InjectView(name = "content_frame") protected FrameLayout
contentFrame; The downside's to this are:

The downside's to this are:

  • It's not rename-safe or compile-safe (kind of). If you open the layout XML for this and do an IDE-backed rename operation it will not catch this string and update it. It also means you can (technically) compile the above code if there is no content_frame ID that exists. Now the compilation will eventually fail because the generated code will become invalid.

  • It's hard to know what R class to reference in the generated code, especially when you take into consideration the fact that you can use references to IDs that exist in libraries that you are referencing.

  • It forces us to have defaults for both the value and name properties on each annotation which means you can write @InjectView Foo foo and Butter Knife will have to fail the builder rather than javac.

Because of these facts, I have chosen not to support library projects.

One way that this could potentially be solved is to use a Gradle plugin rather than an annotation processor. I don't have the time to explore something like that for a few months though.

天蓬老师天蓬老师2772日前592

全員に返信(7)返信します

  • 阿神

    阿神2017-04-17 17:33:58

    Android Studio Prettify

    このプラグインは、findViewById などのコンテンツを自動的に生成します。お試しください。
    バターナイフは使用できないとのことですが、使い方が間違っている可能性がありますので、よく確認してください。

    返事
    0
  • 怪我咯

    怪我咯2017-04-17 17:33:58

    モジュールには他に何も表示されないようなので、findViewById を直接使用してください

    返事
    0
  • ringa_lee

    ringa_lee2017-04-17 17:33:58

    今ではバターナイフはほとんど必要ありません。メソッドを BaseActivity または BaseFragment に直接カプセル化するだけです

    リーリー

    返事
    0
  • PHP中文网

    PHP中文网2017-04-17 17:33:58

    これでも問題ありません。さらに多くの機能があります
    https://github.com/excilys/androidannotations

    返事
    0
  • 迷茫

    迷茫2017-04-17 17:33:58

    ID を見つけるにはシステムに付属の findviewyid を使用するのが最善です。サードパーティ ツール間では競合が発生します。

    返事
    0
  • PHPz

    PHPz2017-04-17 17:33:58

    RoboGuice または Android アノテーション?

    返事
    0
  • 黄舟

    黄舟2017-04-17 17:33:58

    返事
    0
  • キャンセル返事