[JAVA] [Android] Dynamisch die Höhe von ListView mit Kopie einstellen (für Anfänger)

Das Festlegen der Höhe von ListView ist überraschend kompliziert.

Mit wrap_contents wird es eins oder Elemente laufen je nach Gerät über und über ....

Selbst wenn ich nachschaue, kann ich viel davon finden, aber ich dachte, dass es nicht einfach sein würde, weil es viele Dinge gab, die unerwartet verwirrend waren, wie tiefe Bezugnahme und Zusammenbruch, ohne den Lebenszyklus zu kennen.

Daher kann es leicht implementiert werden, indem die später beschriebenen Funktionen verwendet werden.

Wenden Sie einfach den Adapter an, bereiten Sie diese Funktion für die Listenansicht mit den Daten vor, die Sie anzeigen möchten, und übergeben Sie die Listenansicht als Argument.

Wenn Sie einen Teil der Höhe dynamisch ändern möchten, wird es meiner Meinung nach sauberer, wenn Sie in der for-Anweisung Steuerungssyntax usw. hinzufügen.

Java

ListViewUtil.java




public static void setListViewHeightBasedOnChildren(ListView listView) {
    
    //Holen Sie sich ListAdapter
    ListAdapter listAdapter = listView.getAdapter();

    if (listAdapter == null) {
        //Nullprüfung
        return;
    }

    //Initialisieren
    int totalHeight = 0;

    //Messen Sie die Höhe jedes Artikels und fügen Sie hinzu
    for (int i = 0; i < listAdapter.getCount(); i++) {
        View listItem = listAdapter.getView(i, null, listView);
        listItem.measure(0, 0);
        totalHeight += listItem.getMeasuredHeight();
    }

    //Holen Sie sich LayoutParams
    ViewGroup.LayoutParams params = listView.getLayoutParams();

    //(Trennhöhe*Anzahl der Elemente)Ich werde nur hinzufügen
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));

    //Ich werde die Höhe auf LayoutParams setzen
    listView.setLayoutParams(params);
}

Kotlin

ListViewUtil.kt


fun setListViewHeightBasedOnChildren(listView:ListView) {

  //Holen Sie sich ListAdapter
  val listAdapter = listView.getAdapter()
  if (listAdapter == null)
  {
    //Nullprüfung
    return
  }

  //Initialisieren
  val totalHeight = 0

  //Messen Sie die Höhe jedes Artikels und fügen Sie hinzu
  for (i in 0 until listAdapter.getCount())
  {
    val listItem = listAdapter.getView(i, null, listView)
    listItem.measure(0, 0)
    totalHeight += listItem.getMeasuredHeight()
  }

  //Holen Sie sich LayoutParams
  val params = listView.getLayoutParams()

  //(Trennhöhe*Anzahl der Elemente)Ich werde nur hinzufügen
  params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1))

  //Ich werde die Höhe auf LayoutParams setzen
  listView.setLayoutParams(params)
}

Wenn es eine bessere Implementierungsmethode gibt, bringen Sie mir dies bitte bei.

Referenzartikel: Android Listview Measure Height

Recommended Posts

[Android] Dynamisch die Höhe von ListView mit Kopie einstellen (für Anfänger)
[Android] [Java] Verwalten Sie den Status der CheckBox von ListView
Die Geschichte der Optimierung der Android-App mit libGDX
Android Studio-Entwicklung zum ersten Mal (für Anfänger)
[Für Anfänger] Verstehen Sie schnell die Grundlagen von Java 8 Lambda
<Android> Ändern Sie die Hintergrundfarbe der List-Zeile von ListView
Passen Sie die Höhe des WebView-Dialogfelds automatisch an die Größe des Inhalts an
Ich habe versucht, mir zu erlauben, die Verzögerung für den Android UDP-Client einzustellen
Ich werde die Verschachtelung von Aussagen erklären, die Anfänger töten
[Swift] So ändern Sie dynamisch die Höhe der Symbolleiste auf der Tastatur
[Android Studio] Legen Sie ein beliebiges Bild für den Anwendungshintergrund fest. [Java]
[Eclipse / Github] Lassen Sie uns das mit Eclipse auf Github erstellte Projekt für Anfänger teilen
[Android Studio] [Für Anfänger] Lassen Sie uns den Bildschirm und das Verzeichnis grob erklären
Über die Grundlagen der Android-Entwicklung
[Für Anfänger] Zusammenfassung des Java-Konstruktors
Umgebungsbau mit Docker für Anfänger
Links zum Erstellen von Android-Apps (für Anfänger)
Hinweise für Anfänger in der Android-Anwendungsentwicklung
Memorandum über die Verwendung von Appium Desktop Inspector im Emulator (Android App)
Stellen Sie die Anzahl der Sekunden für den schnellen Vor- und Rücklauf in ExoPlayer ein
Die Geschichte der ersten Veröffentlichung der Android-App im Play Store.
[Rails] Artikel für Anfänger, um den Fluss von form_with zu organisieren und zu verstehen
(Memo) Holen Sie sich mit Hilfe von Gradle eine Reihe von abhängigen Bibliotheksgläsern