2016-09-22 8 views
0

BindingAdapterを使用しているプロジェクトをコンパイルすると、Androidスタジオは常に警告を表示し、ソースファイルにジャンプします。コードはBindingAdapterです。どのように解決できますか?コンパイル時にそれを表示するにはまた、私は誰も助けてくれるネームスペースアプリまたは他のを削除したくありません。ありがとうございました!!!
警告は以下の通りです:The Warning
例のソースコード:注釈の名前空間: The example codeAndroid Studioアプリケーション名空間についての警告

+1

[この回答](http://stackoverflow.com/questions/35313466/android-databinding-custom-binding-adapter-warning)によると、 "app:"名前空間を削除するだけで済みます。 –

+0

これは前に知っていますが、このアプリケーションの名前空間を削除したくありません。他の同僚のアンドロイドスタジオはこの種の問題を示していませんでした。これを解決する他の方法はありますか? –

答えて

0

@Michael Spitsinコメントで指摘したように、単に「アプリ」を削除します。レイアウトXMLに "app:"名前空間を保持することができます。名前空間はandroid:でない限り内部的に削除されます。他のすべての名前空間は同じように扱われます。

警告は、名前空間が注釈に影響を与えないことを通知する役割を果たします。したがって、たとえば、@BindingAdapter("app:src")@BindingAdapter("foo:src")の異なるメソッドを持つことはできません。名前空間は、その注釈の実装でキーとして使用される前に削除されます。唯一の例外はandroid名前空間です。 @BindingAdapter("android:src")、さらに@BindingAdapter("app:src")とすることができます。

@BindingAdapter注釈を実装するソースコードを調べると、警告の理由である名前空間が削除されていることがわかります。例えば、android.databinding.tool.store.SetterStore.addBindingAdapterからこの抜粋に:

public void addBindingAdapter(ProcessingEnvironment processingEnv, String attribute, 
     ExecutableElement bindingMethod, boolean takesComponent) { 
    attribute = stripNamespace(attribute); 

...あなたがそうのように、名前空間が取り除かれていることがわかります。

private static String stripNamespace(String attribute) { 
    if (!attribute.startsWith("android:")) { 
     int colon = attribute.indexOf(':'); 
     if (colon >= 0) { 
      attribute = attribute.substring(colon + 1); 
     } 
    } 
    return attribute; 
} 

これが行われていることが結合アダプタは全体の作業する必要があるため、特定のXMLファイル内の名前空間に使用された文字列に関係なく、プロジェクト内のすべてのソースファイル。

関連する問題