Frage

Ich habe eine ziemlich komplexe Ansicht, und als Teil davon habe ich eine Listansicht in einem Linearlayout in einer Scrollview (und viel mehr Komponenten, aber sie sind in diesem Thema keine Rolle).

Jetzt scrollt die gesamte Aktivität gut so, dass sie sollte, aber die Liste hat eine begrenzte Höhe, und wenn die darin enthaltenen Elemente die Höhe übertreffen, verschwindet das Verschwinden meines Bildschirms. Ich habe versucht, den ListView in Its Its eigene Scrollview zu platzieren, aber das funktioniert nicht. Wenn ich versuche, auf die ListView zu scrollen, wird die HauptscrollView ausgewählt und mein Bildschirm scrolls anstelle der ListView.

Meine Frage mag einfach klingen, aber ich konnte dies nicht beheben ... Ist es möglich, die ListView -Scrollable zu machen?

Das relevante XML:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

    <LinearLayout android:id="@+id/GlobalLayout" 
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:orientation="vertical" >

        <ListView android:id="@+id/EndpointList"
                  android:choiceMode="multipleChoice"
                  android:layout_height="175dip"
                  android:layout_width="fill_parent" />

    </LinearLayout>

</ScrollView>
War es hilfreich?

Lösung 2

Tatsächlich funktioniert die Art und Weise, wie ich es eingerichtet habe, wirklich funktioniert ... eine Listansicht in einem Linearlayout in einer ScrollView zu platzieren. Vermeiden Sie einfach, dass das ListView das direkte Kind der Scrollview ist, und es wird gut funktionieren ...

Beachten Sie nur, dass wenn es in der ListView nicht genügend Elemente gibt, um es zu füllen, so dass es nicht scrollen wird (eine Art logischerweise). Beachten Sie auch, dass Sie, wenn Sie über genügend Elemente zum Scrollen verfügen, weiterhin auf ein Element in der Listansicht drücken müssen, um es zu scrollen, und die Hälfte der Zeit wird der Global ScrollView an der Stelle der ListView konzentriert ... zu Vermeiden Sie dies (meistens) und drücken Sie weiter auf den obersten oder die meisten Down -Element, je nachdem, wie Sie scrollen möchten. Dies optimiert Ihre Chance, sich auf Ihre Listansicht zu konzentrieren.

Ich habe ein Video gemacht, das möglich ist, lade es jetzt auf YouTube hoch ...

Video ist http://www.youtube.com/watch?v=c53oig_3lky. Die Qualität ist ein bisschen schlecht, aber sie beweist meinen Standpunkt.

Nur für eine globale Übersicht habe ich die Scrollview verwendet, um meine gesamte Aktivität, das Linearlayout für das Layout der Aktivität und die ListView zu scrollen zu können, und die Liste erstellen ...

Andere Tipps

Anstelle von ListView mit anderen Layouts in ScrollView erstellen Sie eine Liste mit Header und Fußzeile.

Fügen Sie Ansichten hinzu, die über ListView als Header liegen sollten:

addHeaderView(View v)

und das unten als Fußzeile:

addFooterView(View v)

Setzen Sie alles, was über ListView stehen soll, auf den Header of ListView und das gleiche mit Fußzeile.

    LayoutInflater inflater = LayoutInflater.from(this);
    mTop    = inflater.inflate(R.layout.view_top, null);
    mBottom = inflater.inflate(R.layout.view_bottom, null);

    list.addHeaderView(mTop);
    list.addFooterView(mBottom);
    // add header and footer before setting adapter
    list.setAdapter(mAdapter);

Im Ergebnis erhalten Sie eine scrollbare Ansicht.

Probieren Sie diesen Code aus, kann Ihnen helfen

        ListView listView = ( ListView ) findViewById(R.id.lsvButton3);
        listView.setOnTouchListener(new ListView.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int action = event.getAction();
                switch (action) {
                    case MotionEvent.ACTION_DOWN:
                        // Disallow ScrollView to intercept touch events.
                        v.getParent().requestDisallowInterceptTouchEvent(true);
                        break;

                    case MotionEvent.ACTION_UP:
                        // Allow ScrollView to intercept touch events.
                        v.getParent().requestDisallowInterceptTouchEvent(false);
                        break;
                }

                // Handle ListView touch events.
                v.onTouchEvent(event);
                return true;
            }
        });

Ich möchte einfach etwas für das Video notieren

Die ListView funktioniert sobald jedes X nicht weil Sie es in einem Linearlayout platziert haben, sondern weil Sie den Teiler berühren ...

Die ScrollView wird dann in Betracht ziehen, dass der Ort, an dem Sie berührt haben, nicht Kinder haben, um den MotionEvent an ... also den Super.DispatchTouchEvent zu entsenden, der in diesem Fall die Ansicht ist.

Wenn Sie sich in einer Zeile berühren, sendet die Scrollview, die wirklich eine ViewGroup ist, den Versand an die Kinder in Ihrem Fall, die Textansicht und ruft niemals die Ansicht an, sodass die ListView nicht scrollen kann.

Hoffe, meine Erklärung war klar genug, um darauf hinzuweisen, warum sie nicht funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top