Eu tenho um layout para uma visualização -
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="0px"
android:orientation="vertical">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/items_header"
style="@style/Home.ListHeader" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/items_none"
android:visibility="gone"
style="@style/TextBlock"
android:paddingLeft="6px" />
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/items_list" />
</LinearLayout>
O que eu quero fazer é na minha atividade principal com um layout como este
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="0px"
android:id="@+id/item_wrapper">
</LinearLayout>
Quero fazer um loop no meu modelo de dados e injetar várias visualizações que consistem no primeiro layout no layout principal. Eu sei que posso fazer isso criando os controles completamente dentro do código, mas queria saber se havia uma maneira de criar dinamicamente os modos de exibição para que eu possa continuar usando um layout em vez de colocar tudo no código.
Respostas:
Use o
LayoutInflater
para criar uma vista com base no seu modelo de layout e injete-a na vista onde você precisar.Talvez você precise ajustar o índice onde deseja inserir a exibição.
Além disso, defina o LayoutParams de acordo com como você deseja que ele caiba na visualização pai. por exemplo
FILL_PARENT
, com , ouMATCH_PARENT
etc.fonte
getLayoutInflater()
LayoutInflater vi = getLayoutInflater();
partir de uma atividade para preservar o tema da atividade que você não vê de outra forma.Veja a
LayoutInflater
turma.fonte
Parece que você realmente deseja um ListView com um adaptador personalizado para aumentar o layout especificado. Usando um ArrayAdapter e o método,
notifyDataSetChanged()
você tem controle total da geração e renderização de Views.Dê uma olhada nestes tutoriais
fonte
Para tornar a resposta de @Mark Fisher mais clara, a exibição inserida que está sendo inflada deve ser um arquivo xml na pasta de layout, mas sem um layout (ViewGroup) como LinearLayout etc. Meu exemplo:
res / layout / my_view.xml
Em seguida, o ponto de inserção deve ser um layout como LinearLayout:
res / layout / activity_main.xml
Então o código deve ser
A razão pela qual eu postei essa resposta muito semelhante é que, quando tentei implementar a solução de Mark, fiquei presa em qual arquivo xml devo usar para insert_point e a visualização filho. Primeiro, usei o layout na exibição infantil e ele não estava funcionando totalmente, o que levou várias horas para descobrir. Portanto, espero que minha exploração possa economizar o tempo dos outros.
fonte
fonte