如何通过忽略大小写过滤Recycleview?

时间:2019-01-17 06:36:31

标签: java android

我从Recyclerview中获取数据,我在应用程序中添加了searchview过滤器,但是当我搜索大写字母和小写文本时,找不到任何结果,我认为这可能会导致字符串出现问题,请帮我解决这个问题!< / p>

private void search(final String s){
            final FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
            Query query = FirebaseDatabase.getInstance().getReference("Users").orderByChild("name").startAt(s).endAt(s + "\uf8ff");


        query.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                if (!TextUtils.isEmpty(s)) {
                    arrayList.clear();
                    for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                        final Contacts contacts = dataSnapshot1.getValue(Contacts.class);
                        assert firebaseUser != null;
                        assert contacts != null;
                        if (!contacts.getUid().equals(firebaseUser.getUid())) {
                            arrayList.add(contacts);
                        }
                    }


                 MyAdapter myAdapter = new MyAdapter(getApplication(), arrayList, new MyAdapter.OnItemClickListener() {
                  @Override
                   public void onItemClick(Contacts item) {
                            //Toast.makeText(FindFriendsActivity.this, "Item Clicked", Toast.LENGTH_LONG).show();
                    String visit_user_id=item.getUid();
                    Intent profileIntent=new Intent(FindFriendsActivity.this,ProfileActivity.class);
                     profileIntent.putExtra("visit_user_id",visit_user_id);
                      startActivity(profileIntent);
                        }
                    });

                    FindFriendsRecyclerList.setAdapter(myAdapter);
                    myAdapter.notifyDataSetChanged();

                } else {
                    arrayList.clear();
                    //onStart();
                    FindFriendsRecyclerList.setLayoutManager(new LinearLayoutManager(FindFriendsActivity.this));
                    adapter.startListening();
                    FindFriendsRecyclerList.setAdapter(adapter);
                }

            }
            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }

我从查询和Firebase数据快照中获取了快照,但是当我在searchview上搜索大写字母和下部文本时,没有找到结果,该如何忽略代码中的大小写问题

3 个答案:

答案 0 :(得分:5)

public boolean regionMatches(boolean ignoreCase,
                             int toffset,
                             String other,
                             int ooffset,
                             int len)

ignoreCase:如果为true,则在比较字符时忽略大小写。

public static boolean containsIgnoreCase(String str, String searchStr)     {
        if(str == null || searchStr == null) return false;

        final int length = searchStr.length();
        if (length == 0)
            return true;

        for (int i = str.length() - length; i >= 0; i--) {
            if (str.regionMatches(true, i, searchStr, 0, length))
                return true;
        }
        return false;
    }

答案 1 :(得分:2)

您可以使用等于忽略大小写...这是忽略大小写的字符串函数。

if (!contacts.getName().toLowerCase().contains(s.toString().toLowerCase())) // something like this..
{
    arrayList.add(contacts);
}

您可以尝试使用.toLowerCase()输入用户名和从搜索视图中获取的文字,然后检查...以搜索用户名...

我认为您可能正在获取通讯录类的对象中的所有数据。然后,您只需要从您的搜索视图(如上)中的搜索视图中检查输入的字符串,如.contains就会检查是否输入了字符串是否存在...如果您要搜索以在搜索视图中输入的字符串开头的名称,也可以执行.startsWith(s.toString().toLowerCase())

答案 2 :(得分:0)

您还可以使用toLowerCase()或toUpperCase()将它们都转换为相同的大小写:

public class ReferenceSetter : MonoBehaviour
{
    public References references;

    // Reference those in the inspector as usual
    public Camera camera;
    public Transform transform;
    public CharacterController controller;

    private void Awake()
    {
        references.Set(camera, controller, transform);
    }
}