/ / ListView com ArrayAdapter mostrando apenas 1 item para altura wrap_content - android, layout android, listview, android-listview, android-arrayadapter

ListView com ArrayAdapter mostrando apenas 1 item para altura wrap_content - Android, android-layout, listview, android-listview, android-arrayadapter

Eu estou tendo um problema onde meu ListView está exibindo apenas uma linha, embora ArrayList contendo dados tem 2 itens nele.

Para esclarecimento, SIMEstou usando ListView dentro de um ScrollView, mas para equilibrar estou usando o ExpandableHeightListView personalizado (recuperado de uma das respostas no SO) que é útil exatamente para essa finalidade. Este ListView não é rolável. Tem altura fixa.

Além disso, dentro do mesmo ScrollView, alguns outros ListView estão funcionando bem, mas este ListView não está funcionando corretamente.

Indo mais longe, quando eu registrei o posição valor da variável dentro do método getView (), é sempre 0 para este ListView enquanto para outro ListView, ele está aumentando sequencialmente.

Eu comparei o código do adaptador e eles são idênticos, mas o ListView atual não está funcionando.

Eu tentei com a substituição do método getView (), mas sem sucesso.

Qualquer ajuda apreciada.

EDITAR

Se eu der uma altura fixa para ListView como 250dp, ambas as linhas serão exibidas, mas mostrará apenas 1 linha com altura definida como wrap_content

Respostas:

6 para resposta № 1

É um problema muito comum, para resolver isso você deve ler e implementar Esta solução de trabalho e solução.

No meu caso, funciona perfeitamente. Você também deve tentar.


1 para resposta № 2

Como eu sei que ListView dentro de um scrollView não funcionou corretamente.

Porque ambos os widgets têm scroll, então eles não funcionam bem.

Então eu recomendo excluir o ScrollView

Obrigado..


1 para resposta № 3

Eu sei que isso não é o que você quer ouvir, mas a sério, o que quer que você esteja programando, considere exibi-lo em abas ou algo semelhante, de tal forma que você não precise de scrollview.

Se você realmente precisa ter tantos dados em uma tela, considere usar algo como um LinearLayout com um adaptador para exibir seus dados.

Listviews não são projetados para funcionar dentro de umscrollview porque eles são roláveis ​​por conta própria. Você pode "cortar" o seu caminho em torno dele, mas não é bom. Se você realmente precisa dos recursos que listviews fornecem, considere dividir suas telas em abas, exibindo um listview ou dois em cada guia.


0 para a resposta № 4

Esta solução funcionou para mim e também ajusta olayout automaticamente. No adaptador ListView de nível superior, dentro do método getView (), você criará uma exibição que faça referência a um layout com outro ListView. Supondo que o ListView "interno" seja declarado como "listView" com seu adaptador chamado "adaptador", tente usar o código abaixo. Além disso, certifique-se de que o layout interno de ListView esteja definido como WRAP_CONTENT, de forma que, mesmo que a altura esteja correta, ela não esteja sendo substituída pelas restrições de layout.

listView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
listView.getLayoutParams().height = adapter.getCount() * {whatever your list item height is}  OR do something else to add up all of the heights;
listView.requestLayout();
listView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
}
);