webentwicklung-frage-antwort-db.com.de

Deaktivieren Sie das Scrollen einer ListView, die in einer ScrollView enthalten ist

Ich möchte einen Profilbildschirm für meine Benutzer anzeigen.

Es muss drei Ansichten (2 Buttons und ein ImageView) und ein ListView haben, um den von diesem Benutzer erstellten Inhalt anzuzeigen.

Ich möchte jedoch nicht, dass ListView einen Bildlauf durchführt. Stattdessen möchte ich, dass er so groß ist, wie er benötigt wird, und alle meine Ansichten in ein ScrollView-Objekt einfügt, sodass die drei ersten Ansichten mit dem ListView-Bild nach außen rollen. Dies funktioniert natürlich nicht wie beabsichtigt.

Alle meine drei Gegenstände befinden sich in einem LinearLayout. Ich dachte daran, sie zum ersten Element in der ListView zu machen, aber dies führt dazu, dass sie als erstes Element auswählbar sind und einige unnötige Codierungen vornehmen müssen. 

Gibt es eine Möglichkeit, dies auf einfache Art und Weise zu tun, oder muss ich mich daran halten, das Layout zum ersten Element in meiner ListView zu machen?

32
1CjaWfbSbARo

Das Hinzufügen zu ListView als erstes Element scheint eine ziemlich gute Lösung zu sein.

Um die Ansicht nicht auswählbar zu machen, rufen Sie einfach die Ansicht und .setClickable(false) auf.

7
Yalla T.

Ich habe dafür eine sehr einfache Lösung gefunden. Holen Sie sich einfach den Adapter der Listenansicht und berechnen Sie die Größe, wenn alle Elemente angezeigt werden .. Der Vorteil besteht darin, dass diese Lösung auch in einer ScrollView funktioniert.

Beispiel:

public static void justifyListViewHeightBasedOnChildren (ListView listView) {

    ListAdapter adapter = listView.getAdapter();

    if (adapter == null) {
        return;
    }
    ViewGroup vg = listView;
    int totalHeight = 0;
    for (int i = 0; i < adapter.getCount(); i++) {
        View listItem = adapter.getView(i, null, vg);
        listItem.measure(0, 0);
        totalHeight += listItem.getMeasuredHeight();
    }

    ViewGroup.LayoutParams par = listView.getLayoutParams();
    par.height = totalHeight + (listView.getDividerHeight() * (adapter.getCount() - 1));
    listView.setLayoutParams(par);
    listView.requestLayout();
}

Rufen Sie diese Funktion über Ihr ListView-Objekt auf:

justifyListViewHeightBasedOnChildren(myListview);

Die oben gezeigte Funktion ist eine Modifikation eines Beitrags in: Bildlauf in der Listenansicht deaktivieren

Bitte beachten Sie, diese Funktion aufzurufen, nachdem Sie den Adapter auf die Listenansicht eingestellt haben. Wenn sich die Größe der Einträge im Adapter geändert hat, müssen Sie auch diese Funktion aufrufen.

45
Chris623

Sie können dies durch

listView.setScrollContainer(false);

für mehr bitte überprüfen 

Wie bekomme ich eine nicht scrollbare ListView?

11

Ich würde eine View mit unsichtbarem Hintergrund oberhalb von ListView hinzufügen. Legen Sie eine View.OnTouchListener() fest. Und verbrauchen Sie das Ereignis, indem Sie true in der onTouch()-Methode von View.OnTouchListener() zurückgeben. 

Wenn die Liste wieder zurückgescrollt werden soll, entfernen Sie den auf der transparenten View festgelegten Berührungslistener.

5
Sudarshan Bhat

wenn Sie eine begrenzte Anzahl von Elementen in der Listenansicht anzeigen möchten und das Blättern der Listenansicht verhindern möchten, müssen Sie die Listenansichtshöhe über der Gesamthöhe der Elemente halten. 

sie möchten beispielsweise 3 Elemente anzeigen. (Reihenhöhe ist 30). dann wird die Gesamthöhe der Elemente 3 x 30dp = 90dp,

jetzt müssen Sie die Listenansicht auf mehr als 90 einstellen. Beispiel: 100dp. Ihre Liste wird also auf keinen Fall durchlaufen. 

4
Usman Nisar

Ich denke, der beste Weg wäre, die 2 Schaltflächen und die Bildansicht in ein LinearLayout (oder ein beliebiges Layout, das Ihren Anforderungen entspricht) zu platzieren und dieses Layout mithilfe der addHeaderView-Methode als Listenkopf hinzuzufügen:

http://developer.Android.com/reference/Android/widget/ListView.html#addHeaderView(Android.view.View )

2
Olivier Bonal

mit der folgenden Anweisung: 

name_lista.getLayoutParams (). height = new_size

new_size ist eine Variable, die Sie anhand der Anzahl der Elemente Ihrer Liste berechnen. Beispiel:

new_size = 100 * list_size;
0
fredy