2016-09-22 41 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文件中用于名称空间的字符串是什么,该项目中的任何和所有源文件。

相关问题