2016-09-22 43 views
0

當我編譯使用BindingAdapter的項目時,Android Studio總是顯示很多警告並跳入源代碼文件,我編寫的代碼爲BindingAdapter。我該如何解決它,我從不想要顯示它,當我編譯和也我不想刪除名稱空間的應用程序或其他,任何人都可以幫助我。謝謝!!!
該警告是以下:The Warning
示例源代碼: The example codeAndroid Studio有關應用程序名稱空間的警告

+1

根據[這個答案](http://stackoverflow.com/questions/35313466/android-databinding-custom-binding-adapter-warning)你只需要刪除「app:」命名空間。 –

+0

我以前就知道這一點,但我不想刪除這個應用程序命名空間。其他同事的android studio沒有顯示出這樣的問題。還有其他方法可以解決這個問題。 –

回答

0

如@邁克爾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文件中用於名稱空間的字符串是什麼,該項目中的任何和所有源文件。

相關問題