我从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上搜索大写字母和下部文本时,没有找到结果,该如何忽略代码中的大小写问题
答案 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);
}
}