Obtener altura de ListView después de setadapter

Bueno, estoy tratando de obtener mi altura listview después de cambiar los datos, pero siempre devolver la altura anterior, no la actual.

Así que cuando establezco el setadapter, y obtener el valor antiguo. p.ej:

ActualHeight = 100 Change data (filter) -> NewHeight = 60 ListView.GetHeight still returns 100. Again ActualHeight = 60 Change data (filter) -> NewHeight = 20 ListView.GetHeight still returns 60. 

El código que estoy usando es:

  int width, height = 0; EditText edt_search; ListView lv_marca; List<Marca> list_marca = new ArrayList<Marca>(); List<Marca> list_marca_search = new ArrayList<Marca>(); String text = edt_search.getText().toString(); list_marca_search.clear(); if(text.startsWith(".")){ text = text.replace(".", ""); for (Marca m : list_marca) { if (String.valueOf(m.getCd_marca()).equals(text)){ list_marca_search.add(m); } } } else { for (Marca m : lista_marca) { if (m.getDs_marca().contains(text)){ list_marca_search.add(m); } } } ArrayAdapter<Marca> adapter_marca = new CustomAdapter_Marca(MyDialog.this, R.layout.layout_consulta_estoque_marca_lista, list_marca_search); lv_marca.setAdapter(adapter_marca); int height_window = getWindowManager().getDefaultDisplay().getHeight(); height = lv_marca.getHeight() + getSupportActionBar().getHeight(); if (height >= height_window) { height = (int) (height_window * 0.95); } getWindow().setLayout(width, height); 

Ok, encontré la solución.

Cuando cambio el SetAdapter en mi ListView consigo la altura de la medida que significa una línea, y multiplique por los números de línea más la altura del divisor por los números de línea también.

He aquí un ejemplo de cómo lo hice, no sé si es la mejor manera, pero funciona perfectamente ^^:

  ListView lv_marca; lv_marca.setAdapter(adapter_marca); int list_height = getListViewHeight(lv_marca); private int getListViewHeight(ListView list) { ListAdapter adapter = list.getAdapter(); int listviewHeight = 0; list.measure(MeasureSpec.makeMeasureSpec(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); listviewHeight = list.getMeasuredHeight() * adapter.getCount() + (adapter.getCount() * list.getDividerHeight()); return listviewHeight; } 

Tendrá que agregar un OnHierarchyChangeListener a su listview para que pueda obtener el valor de la nueva altura de la vista de lista cuando se agreguen o eliminen elementos secundarios de la lista:

 lv_marca.setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeListener() { @Override public void onChildViewRemoved(View parent, View child) { // This will give you the height when your new adapter contains // lesser number of items than the previous one int heightAfterItemRemoved=parent.getHeight(); Log.i("list_view_height_change","Height after removing item : "+heightAfterItemRemoved); } @Override public void onChildViewAdded(View parent, View child) { // This will give you the height when your new adapter contains // greater number of items than the previous one int heightAfterItemAdded=parent.getHeight(); Log.i("list_view_height_change","Height after adding item : "+heightAfterItemAdded); } }); 

Hay una captura – esto sólo funcionará si la propiedad 'layout_height' de la vista de lista está establecida en 'wrap_content'. En este caso, la altura de la vista de lista aumenta o disminuye a medida que se agregan o eliminan elementos, respectivamente. La altura de la vista de lista alcanza el valor máximo cuando la vista de lista está completamente llena. Si agrega más elementos a la vista de lista, se desbordará y se desplazará, pero el valor de altura no cambiará, ya que ya ocupa la altura máxima permitida dentro de su vista principal.

Si establece 'layout_height' en 'fill_parent' o 'match_parent', la vista de lista ocupará la altura máxima permitida dentro de su vista primaria desde el principio y, por lo tanto, eliminar o agregar elementos a ella no dará lugar a ningún cambio en su altura .

  • Android: getChild () EditText valores en el botón de clic en ExpandableListView
  • Cómo hacer un ListView transparente en Android?
  • Eliminación de elementos muliple de listview con la casilla de verificación en Android
  • Cómo llamar a clase de adaptador antes de la actividad
  • Transición lenta de Actividades: "estado de inflado de inicialización" múltiple en LogCat
  • android: listview: consigue el valor del cursor en el elemento click
  • Cómo ocultar el popup de filtro en ListView en Android?
  • Efecto de botón de diapositiva en el elemento de vista de lista para Android
  • Android - ListView filtrar el conteo
  • Filtro de búsquedaVer ListView
  • Texto para marquesina dinámicamente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.