2015-06-13 16 views
7

Quello che voglio fare è consentire all'utente di scorrere e aggiornare l'elenco, non importa se i dati sono presenti o meno. Ma quando i dati sono presenti in listview, solo il listview dovrebbe essere visibile, e quando i dati non sono lì, dovrebbe essere visibile la textview vuota. In entrambi i casi, l'utente deve essere in grado di aggiornare la lista tramite lo scorrimento.Android SwipeRefreshLayout con TextView vuoto non funziona correttamente

ho cercato qualche soluzione data here in this discussion ma nessuno di loro suoni di lavoro, l'idea di prendere due SwipeToRefresh funziona bene come dato Here, ma mostra vuoto contenitore anche durante il recupero dei dati dal server.

ho provato con la mia Listview logica avvolgimento e TextView all'interno di un relativo/FrameLayout ma SwipeToRefresh accetta un punto di vista solo come per il suo comportamento

Ecco un frammento di codice XML Ho cercato

<android.support.v4.widget.SwipeRefreshLayout 
     android:id="@+id/activity_main_swipe_refresh_layout" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="0.945" > 


     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" > 

      <ListView 
       android:id="@+id/event_list_eventlist" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:divider="@color/event_background" 
       android:dividerHeight="1dp" > 
      </ListView> 

      <TextView 
       android:id="@+id/event_txt_nothing_found" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_centerHorizontal="true" 
       android:layout_centerInParent="true" 
       android:layout_centerVertical="true" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:textColor="@android:color/darker_gray" 
       android:visibility="gone" /> 
     </RelativeLayout> 
    </android.support.v4.widget.SwipeRefreshLayout> 

prega aiuto

risposta

11

ho risolto lo stesso problema utilizzando FrameLayout, guardo sottostante codice:

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.v4.widget.SwipeRefreshLayout 
     android:id="@+id/layout_swipe_refresh" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <ListView 
      android:id="@+id/lv_products" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:divider="@null" /> 

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

    <TextView 
     android:id="@+id/tv_no_product" 
     style="@android:style/TextAppearance.Medium" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_margin="10dp" 
     android:gravity="center" 
     android:text="@string/msg_no_listing" 
     android:textColor="@color/primary_green" 
     android:visibility="gone" /> 
</FrameLayout> 

È possibile utilizzare anche RelativeLayout, ma la chiave posiziona il proprio ListView all'interno di SwipeRefreshLayout e di TextView all'esterno.

+0

e cosa fare in attività? Voglio dire, questa implementazione permette di scorrere ancora se la lista è vuota? –

+1

Certo, puoi scorrere ancora se la lista è vuota. Sono sicuro che funziona al 100%. –

+0

puoi inserire un po 'di codice per attività se possibile? –

12

Ho avuto questo problema e l'ho risolto senza alcun codice aggiuntivo nell'attività utilizzando il layout di seguito.

Se si utilizza un ListActivity o ListFragment si gestisce visualizzando/nasconde la vista vuota per voi e l'aggiornamento funziona anche con una lista vuota con questa struttura di layout.

Non sono necessari hack, tutto è nello SwipeRefreshLayout, come dovrebbe essere.

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/Refresher" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
     <ListView 
      android:id="@android:id/list" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:divider="@null" /> 
     <ScrollView 
      android:id="@android:id/empty" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
      <TextView 
       android:text="Geen formulieren gevonden" 
       style="@style/text.EmptyView" /> 
     </ScrollView> 
    </LinearLayout> 
</android.support.v4.widget.SwipeRefreshLayout> 

Spero che aiuti chiunque abbia difficoltà a risolvere questo problema.

+0

grazie, funziona come un danno! – mklimek

+0

nessun danno amico mio :) – HendraWD

+0

Ottimo, funziona bene. Mi chiedo perché? c'è qualche spiegazione per questo? – GVillani82

0

finalmente risolvere il problema utilizzando il codice seguente

<android.support.v4.widget.SwipeRefreshLayout 
     android:id="@+id/swipe_container" 
     android:layout_below="@+id/search_product" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 

      <android.support.v7.widget.RecyclerView 
       android:id="@+id/recycler_shop_list" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 

      <ScrollView 
       android:gravity="center" 
       android:fillViewport="true" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

       <com.forysta.inloyal.view.textviews.RegularTextView 
        android:id="@+id/tv_no_shop_data" 
        style="@style/text_Size_16" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:gravity="center" 
        android:text="@string/alert_nodatashop" 
        android:visibility="visible" 
        app:layout_collapseMode="parallax" /> 
      </ScrollView> 
     </LinearLayout> 
    </android.support.v4.widget.SwipeRefreshLayout> 
0

Il mio problema sembra essere senza documenti, ma se l'adattatore per una vista riciclatore non ha dati, e hanno chiamato la funzione setLayoutManager, poi la vista riciclatore diventa un-a scorrimento. La mia soluzione era di chiamare solo setLayoutManager dopo che alcuni dati erano stati ricevuti.