如何使用Android Databinding获取包含的视图?

时间:2015-10-20 09:13:27

标签: android xml android-layout data-binding

我正在玩Android databinding library而我正试图将其与包含的布局一起使用。

我的代码是这样的:

activity_main.xml中

<layout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:bind="http://schemas.android.com/apk/res-auto">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id = "@+id/linearLayout">

    <include
        layout="@layout/view" />
  </LinearLayout>
</layout>

view.xml用

<View xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id = "@+id/myView">
 </View>

MainActivity.java

public MainActivity extends AppCompatActivity{

  private ActivityMainBinding mBinding;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);

    LinearLayout layout = mBinding.linearLayout; // this field is visible
    View myView  = mBinding.myView // THIS FIELD IS NOT VISIBLE
  }


}

正如我在评论中所写的那样,在“包含”布局中声明的视图myView是不可见的。如果我用view.xml中的实际代码替换,那么mBinding.myView变得可见,原因似乎是包含然后。

官方文件仅说明了

  

“数据绑定不支持包含为合并元素的直接子节点。”   但在我看来,View是LinearLayout的孩子,它不是一个直接的孩子..

任何提示?

1 个答案:

答案 0 :(得分:16)

您需要为include语句提供ID:

<include android:id="@+id/included"
    layout="@layout/view" />

现在您可以访问包含视图:

View myView = mBinding.included;

如果您包含的布局是绑定布局,则include将是生成的Binding。例如,如果view.xml是:

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <View
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@{@android:color/black}"
        android:id="@+id/myView"/>
</layout>

然后布局字段将是一个ViewBinding类:

View myView = mBinding.included.myView;