搜索时区分大小写

3
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;
    }
}

我希望能够在我的 Realm 数据库中进行搜索,并且希望搜索视图不区分大小写。但是,我尝试过后发现结果只显示小写数据,无论是插入小写还是大写数据。我不知道该怎么办...


我从未使用过Realm,但是我可以给你一个通用的建议,如果你需要进行不区分大小写的搜索,请考虑将所有数据存储为小写形式,然后使用小写输入进行搜索。 - Tim Biegeleisen
如果我使用 .toLowercase 模式存储它们,当我想要在回收视图中显示它们时,它会以小写形式显示吗?@TimBiegeleisen - Majidd74
3个回答

3
您可以使 realm DB 搜索时不区分大小写,只需在方法中添加第三个参数 Case.INSENSITIVE,并将其设置为布尔值。
public RealmQuery<E> contains(String fieldName, String value, boolean
> caseSensitive)

From documentation: All four string predicates i.e. contains, beginsWith, endsWith, like have an optional third argument to control case sensitivity: Case.INSENSITIVE and Case.SENSITIVE. The default is Case.SENSITIVE.

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

1
是的,可以工作。非常感谢。虽然我自己找到了,但还是谢谢你。 - Majidd74

2
我找到了它......我把我的代码改成这样,它可以工作。原始回答。
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;
}

That .Case.INSENSITIVE did that automatically.


0

将所有结果转换为小写,这样您输入的任何内容都不会区分大小写。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接