Como faço para criar um ListView que não está em um ScrollView, ou tem o ScrollView desativado?

StackOverflow https://stackoverflow.com/questions/2419246

  •  19-09-2019
  •  | 
  •  

Pergunta

Eu quero algumas das guloseimas em um ListView, como ser capaz de usar um ListAdapter e seleção de itens, etc, mas eu não quero a parte ScrollView dele. Eu quero implementar essa parte eu mesmo, de uma maneira diferente (por que ou como eu faço isso não é realmente o ponto desta questão, então, por favor, não pergunte "por quê").

Existe uma maneira de ter um ListView que não está em um ScrollView ou tem a rolagem desativado?

Foi útil?

Solução

A ListView não está em ScrollView. A ListView não rolagem intrinsecamente. Eu não acredito que você pode desativar a rolagem através de uma API simples. Se assim for, suas escolhas são ou ListView subclasse e tentar encontrar maneiras de substituir a rolagem comportamentos, ListView clone e eliminar a rolagem comportamentos, ou escreve sua própria AdapterView que torna as coisas da maneira que quiser.

Outras dicas

Outra maneira de fazer isso é envolver o ListView em qualquer solução personalizada rolagem você cozinhou para cima. Se você definir apenas a altura do ListView ser exatamente tão alto como todas as linhas (usando LayoutParams da exibição de lista), então ele vai agir como um modo normal e não será capaz de rolagem; portanto, você pode adicioná-lo para outra vista de rolagem. A dificuldade com este método é que você tem que saber a altura da sua lista antes do tempo, então você tem que saber a altura de cada linha. Além disso, isso vai criar todas as linhas de uma só vez e assim você não será capaz de tirar proveito do recurso de reciclagem de vista.

Se você não tem uma maneira fácil de calcular a altura antes do tempo, você pode enganar o ListView em fazê-lo para você, substituindo onMeasure e dando-lhe a sua própria altura spec:

// Calculate height of the entire list by providing a very large 
// height hint.  But do not use the highest 2 bits of this integer; 
//  those are reserved for the MeasureSpec mode.
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
        MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top