Я играю с Android databinding library, и я пытаюсь использовать его с включенными макетами.Как получить включенные представления с Android Databinding?
код у меня есть, как это:
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
}
}
Как я уже писал в комментариях v iew myView, объявленный в «включенном» макете, не отображается. Если я заменю фактический код в view.xml, тогда mBinding.myView станет видимым, тогда причина будет включать.
Официальные состояния документации только что
«Связывание данных не поддерживает включать в качестве прямого потомка совмещенную элемента.» , но в моем случае View является ребенком LinearLayout, это не прямой ребенок ..
Любые подсказки?
Как я могу сделать то же самое, но для двух макетов с таким же именем, это для макета для планшетный чехол. Я имею в виду, когда у меня есть два макета с именем «layout/layout.xml» и «layout-sw600dp/layout.xml», а во втором - контейнер «FrameLayout» для фрагментов, это последнее не появляется в классе сгенерированного связывания. Заранее спасибо. – epool
Если у вас есть представление в одном макете, но не для обоих, вы должны увидеть представление в классе, но оно будет равно null, когда один макет связан. Не забудьте указать идентификаторы для просмотров, которые вы хотите иметь в качестве свойств. –