2016-08-25 5 views
0

J'ai essayé d'implémenter la fonctionnalité de SwipeRefreshLayout pour mon Spinner, mais rien ne se passe. Est-ce que quelqu'un a une idée pourquoi cela ne fonctionne pas? Le Spinner charge les données la première fois sans problème, mais quand je fais le geste de glisser, rien ne se passe. Pas de couleurs, pas de filature, pas System.out.println, rien :(SwipeRefreshLayout avec Spinner

Voici mon XML et le code Java.

XML

 <android.support.v4.widget.SwipeRefreshLayout 
      android:layout_width="0dp" 
      android:layout_height="44dp" 
      android:id="@+id/swipe_main"> 
      <Spinner 
       android:id="@+id/data_spinner" 
       android:layout_width="0dp" 
       android:layout_height="44dp"/> 
     </android.support.v4.widget.SwipeRefreshLayout> 

JAVA

spinner = (Spinner) findViewById(R.id.data_spinner); 
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, dataArrayList); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(adapter); 
    spinner.setOnItemSelectedListener(this); 

    swipe = (SwipeRefreshLayout) findViewById(R.id.swipe_main); 
    swipe.setColorSchemeColors(android.R.color.holo_blue_bright, android.R.color.holo_green_light, android.R.color.holo_orange_light, android.R.color.holo_red_light); 
    swipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      adapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_spinner_item,dataArrayList); 
      adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      spinner.setAdapter(adapter); 
      swipe.setRefreshing(false); 
      System.out.println("Is swipe refreshing?..."); 

     } 
    }); 

Merci une à l'avance!

+0

Essayez-vous un balayage lorsque spinner est ouvert (sous forme de liste déroulante) ?? Je pense que ça ne marchera pas. – sJy

+0

Merci @sJy. Oui, j'essaye un coup quand le fileur est ouvert. Donc, ce n'est pas la façon de le faire, hein? : -/ –

+0

Cher @sJy. J'ai implémenté la réponse sur ce http://stackoverflow.com/questions/23830594/swiperefreshlayout-can-host-only-one-direct-child en plaçant le Spinner à l'intérieur d'un RelativeLayout et je peux voir ce que vous dites plus clairement. Le SwipeRefreshLayout fonctionne mais seulement dans la zone du petit élément sélectionné. Savez-vous comment rafraîchir le Spinner quand il est ouvert par hasard? –

Répondre

1

SwipeRefreshLayout fonctionne lorsque vous balayez sur ses vues enfant.

Dans votre cas, lorsque vous cliquez sur Spinner, la liste est ouverte sous la forme DropdownPopup qui est une sous-classe de ListPopupWindow. Ce n'est pas la vue enfant de SwipeRefreshLayout mais une fenêtre contextuelle & d'où le balayage ne fonctionne pas. Mais cela fonctionne si vous balayez sur le Spinner lorsque la liste déroulante n'est pas ouverte.

+0

C'est exact, @sJy. Je suis encore en train de déterminer comment effectuer certaines actions lors de l'exécution d'un geste de dragage sur le Spinner ouvert, ce qui n'est clairement pas le cas avec SwipeRefreshLayout. –

0

Veuillez ajouter le code ci-dessous à votre méthode onCreate après l'initialisation de la balise ofco urse

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

J'espère que cela va vous aider, n'hésitez pas à commenter.

+0

Merci @Mahamadali. Je peux voir le petit cercle maintenant, mais ça ne disparaît pas. Et aussi, comme l'a souligné sJy, cela pourrait même ne pas être le moyen d'implémenter le glissement pour mettre à jour la liste dans le Spinner. –

+0

En fait, j'ai répondu sur la base du besoin que vous voulez juste que l'indicateur de cercle pour montrer @MarieAmida. – Mahamadali