7

Il titolo è chiaro. Sto avendo questo layout:Scorrimento annidato ListView su API <21

_________________ 
|_______________| <- Toolbar  
|___|___|___|___| <- Tablayout 
|    | 
|    | 
| ViewPager | 
|    | 
|_______________| 

Sia barra degli strumenti e tablayout sono all'interno di un AppBarLayout, in modo da poter utilizzare bandiere di scorrimento per nascondere la barra degli strumenti di scorrimento verso l'alto. Il problema è che questo funziona solo con le viste supportate da scorrimento nidificato. La maggior parte delle schede - voglio dire, la maggior parte delle pagine - sono support.v4.NestedScrollView s, quindi va bene; altri sono (e devono essere) ListView s.

Da Lollipop, posso semplicemente aggiungere android:nestedScrollingEnabled="true" alla visualizzazione elenco e la barra degli strumenti si nasconde correttamente sullo scorrimento.

In API < 21, tuttavia, non esiste un attributo di questo tipo e la barra degli strumenti non viene nascosta. Ancora più importante, gli ultimi elementi nell'elenco sono nascosti, a causa di alcuni bug di misurazione in CoordinatorLayout: listview funziona come se avesse lo spazio attualmente occupato dalla barra degli strumenti.

Solutions:

  • Passa a RecyclerView, che supporta lo scorrimento nidificato: Non posso, perché ho bisogno di utilizzare un adattatore esterno-biblioteca che funziona solo con una vista adattatore e che non posso sostituire (ovvero, ParseQueryAdapter);

  • Estendere ListView e implementare lo scorrimento nidificato: sembra molto complicato;

  • Estendere ListView e implementare qualche soluzione, come la misurazione di materiale per evitare il problema dell'ultimo elemento o (e) un comportamento personalizzato per nascondere la barra degli strumenti: sembra anche complicato;

  • Utilizzare un trucco di layout: non trovato nessuno.

Qualsiasi aiuto?

Per esempio, io (disperatamente) provato:

<android.support.v4.widget.NestedScrollView 
    android:nestedScrollingEnabled="true" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <ListView 
     android:id="@+id/list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
    </ListView> 

</android.support.v4.widget.NestedScrollView> 

Ma in questo modo il ListView non viene presentata come match_parent. Ottengo una piccola visuale con una piccola altezza e il resto della pagina è vuoto.

risposta

2

Purtroppo, non v'è alcun modo per ottenere lo scorrimento nidificato a lavorare su ListView - altrimenti non avrebbe richiesto le modifiche che sono state fatte in API 21.

noterete che l'attuale Parse SDK ha effettivamente rimosso del tutto ParseQueryAdapter . Detto questo, potrebbe essere sensato iniziare a costruire il proprio adattatore basato su RecyclerView usando lo Parse query APIs directly.

+0

Non sono nell'ultima versione, ma ricordo che la classe non è stata elencata nelle API pubbliche per molto tempo. Grazie, tuttavia, per il "non puoi" - ho trascorso alcune ore a occuparmi delle interfacce NestedScrolling. – natario

+0

"non c'è modo di ottenere lo scrolling annidato lavorando su ListView". C'è ViewCompat.setNestedScrollingEnabled (ListView, booleano); – Dogcat

+1

@Dogcat - che non fa nulla prima dell'API 21. Ti evita semplicemente di dover controllare il livello dell'API. – ianhanniballake

Problemi correlati