2017-10-21 7 views
0

Je suis à la recherche de ce problème pendant des heures.
J'ai autocompletetextview qui montre toutes les entrées dans la liste déroulante.
Je conserve les valeurs dans Sharedpreference.Set <String> Trier et supprimer une valeur spécifique

AutoCompleteTextView texttutar; 
ArrayAdapter<String> adapter; 
SharedPreferences.Editor editor; 
SharedPreferences pref; 
Set<String> hs; 

ONCREATE ---- 

    pref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
    editor = pref.edit(); 
    hs = pref.getStringSet("set", new HashSet<String>()); 
    adapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line); 

    texttutar.setAdapter(adapter); 

if(!texttutar.getText().toString().isEmpty()){ 
    hs.add(texttutar.getText().toString()); 
    editor.clear(); 
    editor.putStringSet("set",hs); 
    editor.commit(); 
         } 
    // SortedSet<String> sortedSet = new TreeSet<String>(hs); 
    // Toast.makeText(getApplicationContext(), "" + sortedSet.first(), Toast.LENGTH_LONG).show(); 

// if(hs.size()>=5) 
// hs.remove(hs.iterator().next()); Removing last value of hs 

         adapter.clear(); 
         adapter.addAll(hs); 



    texttutar.setOnTouchListener(new View.OnTouchListener() { 
       @Override 
       public boolean onTouch(View v, MotionEvent event) { 

         adapter.getFilter().filter(null); 
         texttutar.setThreshold(1); 

        } 
        return false; 
       } 
      }); 
     texttutar.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       texttutar.showDropDown(); 
      } 
     }); 

Maintenant, ce code fonctionne parfaitement. Mais j'ai besoin de deux choses à faire.

Premier problème: Quand j'ajouter des valeurs telles que

100-101 - 102-103 -104 à 105

sa me montrant les valeurs comme ça:

102 - 100 - 105-103 - 101 - 104

Je ne sais pas pourquoi. Il doit trier par le temps.

Deuxième problème: Comme vous pouvez le voir, je peux supprimer la dernière valeur, mais je n'ai pas trouvé de solution pour le premier élément.

J'ai essayé quelque chose comme Treeset mais ce n'est pas important. Important est que je devrais supprimer la valeur de Set (Sharedpreference).

Après autotextview affiche la valeur 5, il doit supprimer le premier élément.

Comme ça: J'ajoute ces valeurs. Lorsque j'ajoute 900, le code doit supprimer la première valeur (110), puis la première valeur sera 200. Son travail comme ça.

Répondre

0

Les jeux ne sont pas triés. La définition d'un ensemble est qu'il garde la trace d'un groupe d'éléments et que vous pouvez tester rapidement si un élément est dedans ou non (typiquement en O (log n) ou O (1) temps). Il n'y a aucune promesse d'ordre, et en fait un ensemble utilise habituellement des arbres binaires équilibrés ou un hachage interne, perdant volontairement l'ordre de la vitesse.

Pour ce que vous voulez, un ensemble n'est pas la structure de données appropriée. Vous voulez une file d'attente. Une file d'attente est un groupe ordonné d'éléments dans lequel vous les ajoutez d'un côté et les supprimez de l'autre. En particulier, il semble que vous voulez une file d'attente de taille fixe. Je vous suggère d'en utiliser un plutôt que d'essayer de créer une structure de données inappropriée.