Domanda

ho un bel complesso View accumulo, e come parte di questo, ho una ListView all'interno di un LinearLayout all'interno di uno ScrollView (e un bel po 'più componenti, ma non contano in questo numero).

Ora tutta l'attività scorre bene come dovrebbe, ma il ListView ha un'altezza limitata, e quando gli elementi al suo interno superano l'altezza, il scomparire del mio schermo. Ho cercato di mettere il ListView all'interno di essa la propria ScrollView, ma questo non funziona. Quando provo a scorrere sul ListView, il principale ScrollView è selezionato e il mio schermo scorre invece di ListView.

La mia domanda può sembrare facile, ma non sono stato in grado di risolvere questo problema ... E 'possibile effettuare il ListView scorrevole aswell?

L'XML rilevanti:

<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>
È stato utile?

Soluzione 2

In realtà, il modo in cui l'ho istituito sta realmente lavorando ... Esecuzione di una ListView in un LinearLayout all'interno di uno ScrollView. Basta evitare che il controllo ListView è il figlio diretto del ScrollView, e che tutto si risolverà bene ...

Basta essere consapevoli del fatto che se non ci sono abbastanza elementi in ListView per riempirlo così va 'fuori dallo schermo', che non sarà di scorrimento (tipo di logica però). Si noti inoltre che quando si hanno elementi sufficienti per scorrere, è necessario continuare a premere su un elemento della ListView per farlo scorrere, e la metà del tempo, l'attenzione è data al ScrollView globale al posto del ListView ... Per evitare questo (la maggior parte del tempo), tenere premuto sul più alto o più basso elemento, a seconda del modo in cui si desidera scroll.This ottimizzerà la tua occasione per ottenere attenzione sul vostro ListView.

Ho fatto un video che è possibile, sto caricando ora su YouTube ...

Il video è http://www.youtube.com/watch?v=c53oIg_3lKY. La qualità è un pò male, ma si dimostra il mio punto.

Solo per una visione globale, ho usato lo ScrollView per essere in grado di scorrere tutta la mia attività, la LinearLayout per il layout della propria attività, e il ListView, beh, fare la lista ...

Altri suggerimenti

Invece di ListView con altri layout all'interno ScrollView creare un ListView con intestazione e piè di pagina.

Aggiungi vista che dovrebbe essere al di sopra ListView come intestazione:

addHeaderView(View v)

e che al di sotto come piè di pagina:

addFooterView(View v)

Mettere tutto quello che dovrebbe essere al di sopra ListView alla intestazione della ListView e lo stesso con piè di pagina.

    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);

Nel risultato si otterrà una visualizzazione scorrevole.

Prova questo codice può aiutare

        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;
            }
        });

Vorrei solo nota qualcosa per il video

Il listview sta lavorando una volta ogni x non tocca perché è stato inserito all'interno di un LinearLayout ma perché si sta toccando il partitore di ...

lo ScrollView sarà quindi prendere in considerazione che il posto hai toccato non ha bambini per spedire il MotionEvent a ... quindi chiama il super.dispatchTouchEvent che è in questo caso il View.dispatchTouchView da qui il listview.onTouchEvent.

Quando si tocca all'interno di una riga lo ScrollView che è davvero un viewgroup invierà l'invio ai bambini nel tuo caso il TextView e non chiama mai quello della vista in modo ListView non lo fanno di scorrimento.

La speranza mia spiegazione era abbastanza chiaro a sottolineare perché è non funziona.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top