没有find我的绑定膨胀方法(使用Android,数据绑定。)

我正在使用数据绑定绑定我的Android应用程序的布局。

我已经build立了我的布局(my_custom.xml),并且生成了绑定类(MyCustomBinding),但是Android Studio似乎没有立即findBinding类的.inflate(…)方法,将其标记为错误(红色文字!)。

代码似乎是正确的,因为它编译和build立一个APK就好了。

如何让Android Studio正确更新?

代码示例:

这是我的自定义查看代码:

public class MyCustomView extends FrameLayout { public MyCustomView(Context context) { this(context, null, 0); } public MyCustomView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MyCustomView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); MyCustomBinding binding = MyCustomBinding.inflate(inflater, this, true); binding.aButton.setText("Whatever"); } } 

布局定义为:

  <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> </data> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/a_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click me!" android:padding="10dp" android:background="#000" android:textColor="#fff" android:layout_gravity="center" /> </FrameLayout> </layout> 

这是问题:(突出显示红色)

在这里输入图像说明

Solutions Collecting From Web of "没有find我的绑定膨胀方法(使用Android,数据绑定。)"

有些东西没有在Android Studio中完成,因为您尚未实际执行数据绑定。 一旦你添加一个variables到布局的data元素, inflate方法将会像你期望的那样被find。 也就是说,通过直接通过绑定设置文本字段的值,您实际上并没有从数据绑定中获益。 您应该在绑定中设置View Model,然后让绑定相应地更新视图。 例如:

创build一个视图模型:

 public class MyViewModel { public final ObservableField<String> name; public MyViewModel(String name) { this.name = new ObservableField<>(name); } } 

并在你的布局中使用它

 <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="model" type="com.victoriaschocolates.conceirge.MyViewModel" /> </data> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{model.name}" android:padding="10dp" android:background="#000" android:textColor="#fff" android:layout_gravity="center" /> </FrameLayout> </layout> 

(注意在data元素中声明的variable ,以及在TextView的text属性中如何引用它)

然后在你的自定义视图中绑定这两个:

 public class MyCustomView extends FrameLayout { public MyCustomView(Context context) { this(context, null, 0); } public MyCustomView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MyCustomView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); MyCustomBinding binding = MyCustomBinding.inflate(inflater, this, true); MyViewModel model = new MyViewModel("Whatever"); binding.setModel(model); } } 

当然,最好还是让数据通过自定义视图类中的setter,或者从容器视图传入(参见http://developer.android.com/tools/data-binding/ guide.html#includes )

您可以尝试为您的装订布局设置自定义类名称,并在自定义视图中引用它,以清除您使用的布局:

 <layout> <data class="MyCustomBinding"> </data> </layout> 

如果这不起作用,请使用DataBindingUtil而不是MyCustomBinding ,它返回DataBinding基类,并具有一个inflate()方法:

 MyCustomBinding binding = DataBindingUtil.inflate(inflater, this, true); 

从文档 :

有时绑定不能预先知道。 在这种情况下,可以使用DataBindingUtil类创build绑定:

 ViewDataBinding binding = DataBindingUtil.inflate(LayoutInflater, layoutId, parent, attachToParent); ViewDataBinding binding = DataBindingUtil.bindTo(viewRoot, layoutId); 

你不需要这种types的东西,DataBinding在这里包括DataBindingUtils类。

 public MyCustomView(Context context, AttributeSet attrs, int defStyle){ super(context, attrs, defStyle); LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); MyCustomBinding binding = DataBindingUtil.inflate(inflater, this, true); binding.aButton.setText("Whatever"); }