Minhas perguntas são:
- Qual é exatamente a função do LayoutInflater?
- Por que todos os artigos que li verificam se convertview é nulo ou não? O que significa quando é nulo e o que significa quando não é?
- Qual é o parâmetro pai que este método aceita?
Minhas perguntas são:
1: O LayoutInflater
pega seus arquivos XML de layout e cria diferentes objetos de visualização a partir de seu conteúdo.
2: Os adaptadores são construídos para reutilizar Visualizações, quando uma Visualização é rolada de forma que não seja mais visível, ela pode ser usada para uma das novas Visualizações que aparecem. Esta visualização reutilizada é a convertView
. Se for nulo, significa que não há nenhuma visualização reciclada e temos que criar uma nova, caso contrário, devemos usá-la para evitar a criação de uma nova.
3: O parent
é fornecido para que você possa aumentar sua visualização para os parâmetros de layout adequados.
Todos estes juntos podem ser usados para criar efetivamente a visualização que aparecerá em sua lista (ou outra visualização que leva um adaptador):
public View getView(int position, @Nullable View convertView, ViewGroup parent){
if (convertView == null) {
//We must create a View:
convertView = inflater.inflate(R.layout.my_list_item, parent, false);
}
//Here we can do changes to the convertView, such as set a text on a TextView
//or an image on an ImageView.
return convertView;
}
Observe o uso de LayoutInflater
, que parent
pode ser usado como um argumento para ele e como convertView
é reutilizado.
getView()
método no adaptador é para a visão de item de geração de umListView
,Gallery
...LayoutInflater
é usado para obter a vista objeto que você define em um xml layout (o objeto raiz, normalmente, umaLinearLayout
,FrameLayout
ouRelativeLayout
)convertView
é para reciclagem. Digamos que você tenha uma visualização de lista que só pode exibir 10 itens por vez e, atualmente, está exibindo o item 1 -> item 10. Quando você rola um item para baixo, o item 1 ficará fora da tela e o item 11 será exibido . Para gerar View para o item 11, o método getView () será chamado, econvertView
aqui está a view do item 1 (que não é mais necessária). Então, em vez de criar um novo objeto de Visualização para o item 11 (que é caro), por que não reutilizá-loconvertView
? => apenas verificamos seconvertView
é nulo ou não, se for nulo, criamos uma nova visão, caso contrário, reutilizamosconvertView
.parentView
é o ListView ou Gallery ... que contém a visão do item que égetView()
gerada.Observação : você não chama este método diretamente, apenas precisa implementá-lo para informar à visualização pai como gerar a visualização do item.
fonte
Você poderia dar uma olhada neste vídeo sobre a exibição de lista. É o Google IO dos últimos anos e ainda é o melhor passo a passo em visualizações de lista na minha mente.
http://www.youtube.com/watch?v=wDBM6wVEO70
Ele aumenta os layouts (os arquivos xml em res / layout / pasta) em objetos java, como LinearLayout e outras visualizações.
Veja o vídeo, vai te deixar atualizado com o que adianta a view convert, basicamente é uma view reciclada esperando para ser reutilizada por você, para evitar a criação de um novo objeto e retardar a rolagem da sua lista.
Permite que você faça referência à visualização de lista a partir do adaptador.
fonte
Quando você projeta usando XML, todos os seus elementos de IU são apenas tags e parâmetros. Antes de usar esses elementos da IU (por exemplo, TextView ou LinearLayout), você precisa criar os objetos reais correspondentes a esses elementos xml. É para isso que serve o inflador. O inflador usa essas tags e seus parâmetros correspondentes para criar os objetos reais e definir todos os parâmetros. Depois disso, você pode obter uma referência ao elemento da interface do usuário usando findViewById ().
Isso é interessante. Veja, getView () é chamado toda vez que um item da lista é desenhado. Agora, antes que o item possa ser desenhado, ele deve ser criado. Agora convertView é basicamente a última visualização usada para desenhar um item. Em getView (), você aumenta o xml primeiro e, em seguida, usa findByViewID () para obter os vários elementos de UI do listitem. Quando verificamos por (convertView == null) o que fazemos é verificar se uma visão é nula (para o primeiro item), então a criamos, senão, se já existir, reutilize-a, não há necessidade de passar pelo processo de inflar novamente . Torna muito mais eficiente.
Você também deve ter encontrado um conceito de ViewHolder em getView (). Isso torna a lista mais eficiente. O que fazemos é criar um viewholder e armazenar a referência a todos os elementos da IU que obtivemos após o aumento. Dessa forma, podemos evitar chamar os diversos findByViewId () e economizar muito tempo. Este ViewHolder é criado na condição (convertView == null) e é armazenado no convertView usando setTag (). No loop else, apenas obtemos de volta usando getView () e o reutilizamos.
O pai é um ViewGroup ao qual sua visão criada por getView () é finalmente anexada. Agora, no seu caso, este seria o ListView.
Espero que isto ajude :)
fonte
O inflator de layout aumenta / adiciona XML externo à sua visualização atual.
getView () é chamado várias vezes, incluindo quando rolado. Então, se ele já tem a view inflada, não queremos fazer de novo, pois inflar é um processo caro ... por isso verificamos se é nulo e depois inflamos.
A visualização principal é uma única célula da sua lista.
fonte
LayoutInflater
é usado para gerar visualizações dinâmicas do XML para oListView
item ou noonCreateView
fragmento.ConvertView
é basicamente usado para reciclar as visualizações que não estão na visualização atualmente. Digamos que você tenha um rolávelListView
. Ao rolar para baixo ou para cima, oconvertView
dá a visão que foi rolada. Essa reutilização economiza memória.O parâmetro pai do
getView()
método fornece uma referência ao layout pai que possui o listView. Digamos que você queira obter o ID de qualquer item no XML pai que possa usar:fonte
getView()
método criar novoView
ouViewGroup
para cada linha deListview
ou Spinner. Você pode definir issoView
ouViewGroup
em umLayout XML
arquivo nares/layout
pasta e pode dar a referência para aAdapter
classe Object.se você tiver 4 itens em uma matriz passada para o adaptador.
getView()
método irá criar 4 View para 4 linhas de Adaper.A classe LayoutInflater tem um método inflate () que cria View Object a partir do layout de recurso XML.
fonte
Você também pode encontrar informações úteis sobre getView na interface do adaptador no arquivo Adapter.java. Diz;
fonte