No meu arquivo xml de layout, incluí outro arquivo xml de layout (cada um com um id de Android diferente).
<include layout="@layout/view_contact_name" android:id="+id/test1"/>
<include layout="@layout/view_contact_name" android:id="+id/test2"/>
Mas quando eu o executo no emulador e inicio o Hierarchy Viewer, cada layout ainda mostra 'NO_ID', e no meu código, eu tenho
findViewById(R.id.test1)
e findViewById(R.id.test2)
ambos retornam nulo.
Alguém pode me ajudar com meu problema?
android
android-layout
Hap497
fonte
fonte
@
símbolo.Respostas:
Especifique o ID no
<include>
Em seguida, use dois
findViewById
para acessar os campos no layoutUsando essa abordagem, você pode acessar qualquer campo em qualquer include que tiver.
fonte
merge
nem em teoria, porque o resultado de incluir ummerge
não é uma única visualização, mas um monte delas. Então está tudo bem.Eu descobri que se você estiver usando
<merge>
tag em seu layout de inclusão, o ID de inclusão é transferido para a tag de mesclagem que não é a visualização real.Portanto, remova a fusão ou substitua-a por algum layout.
Tor Norbye escreveu :
fonte
Romain Guy indica que você pode substituir o ID de um layout incluído, colocando um
android:id
atributo dentro da<include>
tag.fonte
Acho que a resposta principal perde o ponto mais importante e pode induzir as pessoas a pensar que
<include/>
tag cria uma visualização que contém o conteúdo de inclusão.O ponto principal é que o id de inclusão é passado para a visualização raiz do arquivo de layout do include.
O que significa que este:
Torna-se isto:
fonte
sim é assim, mas cuidado quando o layout inserido no campo de inclusão é personalizado e você deseja acessar esse layout raiz. Esse layout, neste caso @ layout / test test, é realmente retornado na primeira linha.
fonte
fonte
O problema é que tentamos usar o id que não está declarado no arquivo de layout atual. Em vez de declarar novamente, id pode ser simplesmente referido usando
@+id/
. Se você refatorar o nome de id original por meio do Android Studio, ele também refatora o layout incluído.fonte
Em um caso de uso,
<RecyclerView>
encontre o id de<include>
usando uma instância de visão inflada ou então ele retornará nulo .fonte
Se você definiu id para qualquer tag raiz do layout incluído, você pode usar esse id ou pode definir id para o layout incluído.
Mas você não pode definir id para ambos, pode lançar uma exceção.
Ou
fonte
Ao falar sobre inclusão, você tem um id na visualização raiz dentro do arquivo de layout incluído ou na própria linha de inclusão e não em ambos. Por exemplo:
Arquivo de layout 1
O exemplo acima está errado porque tecnicamente você tem dois ids declarados para o mesmo layout. Portanto, o que você precisa fazer é escolher qual elemento terá o id.
fonte
Uau, não acredito que essa pergunta ainda não tenha a resposta certa. É uma merda de tags simples. Você só pode mudar as coisas que começam com as
android:layout_
queandroid:id
não correspondem. Portanto, a resposta é que você não pode. Desculpe. O que você pode fazer em vez disso é criar uma classe que será um ViewGroup que aumentará as visualizações incluídas dentro, e então adicionar isso como uma tag em seu layout, mas isso é tudo.fonte