Включите в общий макет (не узел слияния), нам нужно назначить идентификатор для включенной части, таким образом, в связывании у нас будет доступ к включенной части
private lateinit var exampleBinding:ActivityExampleBinding//activity_example.xml layoutoverride fun onCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)
exampleBinding =ActivityExampleBinding.inflate(layoutInflater)
setContentView(exampleBinding.root)//we will be able to access included layouts view like this
val includedView:View= exampleBinding.yourId.idOfIncludedView
//[...]}
Включить с блоком слияния во внешнем макете. Мы не можем добавить ID к нему, потому что блок слияния не является представлением. Допустим, у нас есть такой вечный макет слияния (merge_layout.xm):
Чтобы правильно связать такой макет слияния, нам нужно:
В коде вашей активности:
private lateinit var exampleBinding:ActivityExampleBinding//activity_example.xml layoutprivate lateinit var mergeBinding:MergeLayoutBinding//merge_layout.xml layoutoverride fun onCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)
exampleBinding =ActivityExampleBinding.inflate(layoutInflater)//we need to bind the root layout with our binder for external layout
mergeBinding =MergeLayoutBinding.bind(exampleBinding.root)
setContentView(exampleBinding.root)//we will be able to access included in merge layout views like this
val mergedView:View= mergeBinding.someView
//[...]}
Очень простой ответ и использует новый синтаксис - все работает для меня в не-фрагментной деятельности с похожим синтаксисом в onCreate(). Спасибо. (Просто немного проблем с использованием для DrawerLayout)
Толстый Монах
0
Другим простым способом будет использование библиотеки привязки данных. Затем оберните ваш XML-макет тегом, чтобы при использовании библиотеки автоматически генерировались классы, необходимые для связывания представлений в макете с вашими объектами данных. Честно говоря, я думаю, что это путь. Следуйте инструкциям здесь
Ваш первый вопрос о работе с включенным макетом с помощью ViewBinding может быть решен так легко.
Вот пример файла main_fragment.xml
И MainFragment.java может быть таким
Теперь у вас есть две привязки. один из них по умолчанию, а следующий из включенного макета.
источник
onCreate()
. Спасибо. (Просто немного проблем с использованием дляDrawerLayout
)Другим простым способом будет использование библиотеки привязки данных. Затем оберните ваш XML-макет тегом, чтобы при использовании библиотеки автоматически генерировались классы, необходимые для связывания представлений в макете с вашими объектами данных. Честно говоря, я думаю, что это путь. Следуйте инструкциям здесь
источник