2014-10-22 9 views
5

Voglio attivare il mio SwipeRefreshLayout nell'evento onCreateView del mio MainFragment. Quello che voglio fare è iniziare a scaricare le informazioni nell'evento onCreateView e allo stesso tempo mostrare l'aggiornamento SwipeRefreshLayout. Qualche idea?Come attivare swiperefreshlayout in Android?

Ecco il mio codice nel mio codice Java in MainFragment

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
     SwipeRefreshLayout swpRfrshLyt= (SwipeRefreshLayout) rootView.findViewById(R.id.swpRfrshLyt); 

     swpRfrshLyt.setColorSchemeResources(R.color.holo_blue_light, 
       R.color.holo_green_light, 
       R.color.holo_orange_light, 
       R.color.holo_red_light); 

     swpRfrshLyt.setOnRefreshListener(this); 
     swpRfrshLyt.setRefreshing(true); 
     return rootView; 
    } 

Ecco il mio fragment_main.xml

<android.support.v4.widget.SwipeRefreshLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/swpRfrshLyt" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ListView 
     android:id="@+id/lstvw_items" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

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

Sto usando Android Studio, ecco la mia costruzione Gradle

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:+' 
    compile 'com.android.support:support-v4:+' 
    compile 'com.mcxiaoke.volley:library:1.0.+' 
} 

Ho installato Android SDK Build Tools 21.0.2

+0

Eventuali duplicati di [SwipeRefreshLayout innescare a livello di codice] (http://stackoverflow.com/questions/24587925/swiperefreshlayout-trigger-programmatically) –

risposta

18

C'è una soluzione migliore per raggiungere questo obiettivo utilizzando il seguente:

mSwipeRefreshLayout.post(new Runnable() { 
    @Override public void run() { 
     mSwipeRefreshLayout.setRefreshing(true); 
    } 
}); 

Ecco mSwipeRefreshLayout è il SwipeRefreshLayout. Se si chiama semplicemente:

mSwipeRefreshLayout.setRefreshing(true); 

è solito innescare il circolo di animare, quindi aggiungendo la riga sopra basta fare un ritardo nel thread UI in modo che mostra l'animazione cerchio all'interno del thread dell'interfaccia utente.

Chiamando mSwipeRefreshLayout.setRefreshing(true) anche OnRefreshListener verrà eseguito in modo tale che dopo la fine dell'attività sarà sufficiente aggiungere mSwipeRefreshLayout.setRefreshing(false) per interrompere l'animazione circolare.

+0

Pulito e perfetto! – Braj

+0

Grazie mille, mi hai salvato la giornata! – uestcfei

+0

risposta accettata –

5

Dopo aver chiamato swpRfrshLyt.setRefreshing(true); è necessario chiamare effettivamente la funzione che esegue l'aggiornamento. Non viene chiamato automaticamente. Meglio ancora, crea una funzione che fa per te.

UPDATE

NON utilizzare questa soluzione - leggere qui di seguito

Il filatore è dietro la barra delle azioni in modo da avere a spingerla verso il basso.

Display display = getActivity().getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int height = size.y; 
    getSwipeRefreshLayout().setProgressViewOffset(false, 200, height/9); 

UPDATE 2

non avrei più consiglio la mia soluzione di cui sopra. La soluzione migliore è:

getSwipeRefreshLayout().post(new Runnable() { 
    @Override public void run() { 
     getSwipeRefreshLayout().setRefreshing(true); 
    } 
}); 
+0

quello che volevo diciamo è che il metodo swpRfrshLyt.setRefreshing (true); non funziona per me. –

+0

Funziona. Lo spinner appare dietro la barra delle azioni. Ill aggiornare la mia risposta. – KVISH

+0

Funziona! Dove dovrei chiamare swpRfrshLyt.setRefreshing (true) senza hardcoring l'offset? –

2

Oltre ai accettato risposta utilizzare il seguente codice così:

swipeContainer.post(new Runnable() { 
     @Override 
     public void run() { 
      swipeContainer.setRefreshing(false); 
     } 
    }); 

Spiegazione ho implementato la soluzione (utilizzando frammenti), ma dopo lo swipeReferesh iniziato non è mai andato via anche a chiamare swipeContainer.setRefreshing(false); così ha dovuto implementare il codice sopra riportato che ha risolto il mio problema. altre idee perché questo accada sono le benvenute.

saluti,

PS:com.android.support:appcompat-v7:22.2.1