if (Height aller Items > ListView.height) Wie ralisieren?

  • 2 Antworten
  • Neuester Beitrag
Diskutiere if (Height aller Items > ListView.height) Wie ralisieren? im Android App Entwicklung im Bereich Betriebssysteme & Apps.
1

12nico07

Neues Mitglied
Hi,
ich habe eine Listview. Jedes Item ist eine Checkbox, deren Text unterschiedlich lang ist. Mal 1 zeile mal 5 Zeilen.
Wenn die Listview alle Items anzeigen kann (und man nicht scrollen muss) soll etwas passieren. Wenn die Items nicht alle angezeigt werden können und man scrollen muss soll etwas anderes passieren.
Wie kann ich das realisieren?

Ich habe mit folgenden Codes gearbeitet:
Code:
        int numberOfItems = listAdapter.getCount();

        // Get total height of all items.
        int totalItemsHeight = 0;
        for (int itemPos = 0; itemPos < numberOfItems; itemPos++) {
            View item = listAdapter.getView(itemPos, null, listView);
            item.measure(0, 0);
            totalItemsHeight += item.getMeasuredHeight();
        }

        // Get total height of all item dividers.
        int totalDividersHeight = listView.getDividerHeight() *
                (numberOfItems - 1);

        // Get total height
        int total = totalItemsHeight + totalDividersHeight;

       
        if (total > listView.getHeight) {
                // Code
        }

Code:
ListAdapter listAdapter = listView.getAdapter();
    int elemente = 0;
    int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(),
            View.MeasureSpec.AT_MOST);
    for (int i = 0; i < listAdapter.getCount(); i++) {
        View listItem = listAdapter.getView(i, null, listView);
        listItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
        elemente += listItem.getMeasuredHeight();
    }
    elemente = elemente + (listView.getDividerHeight() * (listAdapter.getCount() - 1));

        if (elemente > listView.getHeight) {
                // Code
        }

Leider war in beiden Fällen der Wert listView.getHeigt jedes mal höher, auch wenn ich viele Items hatte und Scrollen musste. Ich habe es auch mit listview.getLayoutParams.Height probiert aber auch ohne ERfolg. Das ergab immer -1.
 
Jaiel

Jaiel

Experte
ganz frech gekalut:

PHP:
public static int getItemHeightofListView(ListView listView, int items) {

    ListAdapter mAdapter = listView.getAdapter();

    int listviewElementsheight = 0;
    // for listview total item height
    // items = mAdapter.getCount(); 


    for (int i = 0; i < items; i++) {

        View childView = mAdapter.getView(i, null, listView);
        childView.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        listviewElementsHeight+= childView.getMeasuredHeight();
        }


        return listviewElementsHeight;

    }


Der ursprüngliche Beitrag von 18:01 Uhr wurde um 18:04 Uhr ergänzt:

der einzige utnerschied zu deinem code oben ist mit welchen parametern die measure() funktion innerhalb der for schleife aufgerufen wird
 
1

12nico07

Neues Mitglied
Danke für deine Hilfe aber dsa funktioniert auch nicht so ganz. Es zeigt mir immernoch dass die Höhe aller Items < Höhe ListView.

Hier können alle Items angezeigt werden. Die Höhe der ListView ist also größer als die aller Items.


Hier können nicht alle Items angezeigt werden. Die Höhe der ListView sollte also kleiner sein als die aller Items. Ist sie aber nicht:




Lösung:
Habe jetzt eine Lösung. Ist vllt nicht die Beste aber funktioniert.

TextView und Listview mit einem Inhalt füllen, kurz warten:
Code:
 new Handler().postDelayed(new Runnable() {

        @Override
        public void run() {
            // Vergleiche listview.getLasVisiblePosition und listview.getAdapter.count 

        }
    }, 10);
 
Zuletzt bearbeitet:
Ähnliche Themen - if (Height aller Items > ListView.height) Wie ralisieren? Antworten Datum
2
4
0