3
votes

Rechercher avec les majuscules et les minuscules

public class ActivityPS extends AppCompatActivity {
    private PS_DA ps_da = new PS_DA(ActivityPS.this);
    RecyclerView recyclerView;
    android.widget.SearchView searchView;
    Realm realm = Realm.getDefaultInstance();
    AdapterPS adapterPS;
    List<PS> filteredPs;
    RealmResults<PS> psList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ps);
        cast();
        setUpRecycler();
        searchviewSetUp();
    }

    public void searchviewSetUp(){
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String s) {
                return false;
            }
        });
    }

    @Override
    public boolean onQueryTextChange(String s) {
        filteredPs =filter(psList,s);
        if (filteredPs.size()> 0){
            return true;
        }
        return false;
    }

    public List<PS> filter (List<PS> psLists,String s){
        s = s.toLowerCase();
        filteredPs = new ArrayList<>();
        for (PS psList : psLists){
        final String text = psList.getCommandName().toString().toLowerCase();
        if (text.contains(s));
            filteredPs.add(psList);
        }
        psList = realm.where(PS.class).contains("commandName",s).findAll();
        adapterPS = new AdapterPS(ActivityPS.this,psList,realm);
        recyclerView.setLayoutManager(new LinearLayoutManager(ActivityPS.this));
        recyclerView.setAdapter(adapterPS);

        return filteredPs;
    }
}
I want to search through my realm DB and I want that my search view isn't sensitive with case of letters. I did this but it shows only lowercase data in result whether insert with lowercase or uppercase. I don't know what should I do...

2 commentaires

Je n'ai jamais travaillé avec Realm, mais un conseil général que je peux vous donner est que si vous avez besoin de faire des recherches insensibles à la casse, envisagez de simplement stocker toutes les données en minuscules, puis de rechercher également en utilisant des entrées minuscules.


si je les stocke avec le mode .toLowercase quand je veux les montrer avec la vue de recycleur, cela montre-t-il en minuscules? @TimBiegeleisen


3 Réponses :


0
votes

Mettez tous les résultats en minuscules, ainsi ce que jamais u rnter ne sera sensible.


0 commentaires

3
votes

Vous pouvez rendre realm DB search insensible à la casse , ajouter Case.INSENSITIVE boolean comme troisième argument dans la méthode:

psList = realm.where(PS.class).contains("commandName",s, Case.INSENSITIVE).findAll();

De la documentation: les quatre prédicats de chaîne, c'est-à-dire contient, commence avec, se termine avec, comme ont un troisième optionnel argument pour contrôler la sensibilité à la casse: Case.INSENSITIVE et Sensible aux majuscules et minuscules. La valeur par défaut est Case.SENSITIVE.

public RealmQuery<E> contains(String fieldName, String value, boolean
> caseSensitive)


1 commentaires

oui ce travail. merci beaucoup, bien que je trouve cela moi-même mais merci



2
votes

Je viens de le trouver ... Je change mon code et cela fonctionne.

public class ActivityPS extends AppCompatActivity {
private PS_DA ps_da = new PS_DA(ActivityPS.this);
RecyclerView recyclerView;
android.widget.SearchView searchView;
Realm realm = Realm.getDefaultInstance();
AdapterPS adapterPS;
List<PS> filteredPs;
RealmResults<PS> psList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_ps);
    cast();
    setUpRecycler();
    searchviewSetUp();
}

public void searchviewSetUp(){
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {

    return false;
}

@Override
public boolean onQueryTextChange(String s) {

   psList = realm.where(PS.class).contains("commandName",s, Case.INSENSITIVE).findAll();
    adapterPS = new AdapterPS(ActivityPS.this,psList,realm);
    recyclerView.setLayoutManager(new LinearLayoutManager(ActivityPS.this));
    recyclerView.setAdapter(adapterPS);


    return false;
}

Ce .Case.INSENSITIVE l'a fait automatiquement.


0 commentaires