ViewBinding - como obter vinculação para layouts incluídos?
11
Ao trabalhar com o ViewBinding, encontro alguns casos não documentados.
Primeiro: como obter encadernação para peças de layout de vista genéricas incluídas, a encadernação principal vê apenas os itens no layout principal?
Segundo: como obter encadernação para peças de layout de tipo de mesclagem incluídas, novamente a encadernação principal vê apenas os itens no layout principal?
Incluir no layout genérico (não no nó de mesclagem), precisamos atribuir o ID à parte incluída, dessa forma, na ligação, teremos acesso à subparte incluída
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
//[...]}
Incluir com bloco de mesclagem no layout externo. Não podemos adicionar ID a ele porque o bloco de mesclagem não é uma visualização. Digamos que tenhamos um layout de mesclagem eterno (merge_layout.xm):
Para vincular adequadamente esse layout de mesclagem, precisamos:
No seu código de atividade:
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
//[...]}
Resposta muito simples e usa a nova sintaxe - todos trabalhando para mim em uma Atividade que não seja um fragmento com sintaxe semelhante onCreate(). Obrigado. (Apenas tendo um pouco de dificuldade em usar para um DrawerLayout)
Fat Monk
0
A outra maneira simples seria usar a biblioteca de ligação de dados. Em seguida, enrole seu layout XML com a tag para que, se você estiver usando a biblioteca, gere automaticamente as classes necessárias para vincular as visualizações no layout aos seus objetos de dados. Honestamente, acho que é o caminho a percorrer. Siga o guia aqui
Sua primeira pergunta, que é trabalhar com um layout incluído usando o ViewBinding, pode ser resolvida com tanta facilidade.
Aqui está um arquivo main_fragment.xml de amostra
E MainFragment.java pode ser assim
Agora, você tem duas ligações. um deles é o padrão e o próximo é do layout incluído.
fonte
onCreate()
. Obrigado. (Apenas tendo um pouco de dificuldade em usar para umDrawerLayout
)A outra maneira simples seria usar a biblioteca de ligação de dados. Em seguida, enrole seu layout XML com a tag para que, se você estiver usando a biblioteca, gere automaticamente as classes necessárias para vincular as visualizações no layout aos seus objetos de dados. Honestamente, acho que é o caminho a percorrer. Siga o guia aqui
fonte