В настоящее время мне нужно выполнить поиск в Android Studio. Я использовал реселлервью, чтобы отобразить всю мою информацию. Мой поиск теперь может фильтровать по имени, но не по состоянию.
(Я думаю, что проблема в том, что Arraylist в цикле содержит только информацию об имени и ссылке, но не другие четыре данных (третий конструктор). Может кто-нибудь сказать мне, как фильтровать два типа информации (пользователь может ввести либоимя или состояние в одном и том же пространстве) в одном поисковике? Большое спасибо:).
Вот мой класс объектов, который состоит из 3 типов конструкторов.
public A(){
}
public A(String name,String link){
this.name = name;
this.link = link;
}
public A(String cname,String ad,String ad2, String state){
this.cname=cname;
this.ad=ad;
this.ad2=ad2;
this.state=state;
}
Вот мой класс Java
ArrayList<A> t;
ArrayList<A> c;
ArrayList<String> searchnamestate;
databaseReference = FirebaseDatabase.getInstance().getReference();
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.child("alluser").child("thera").getChildren()) {
A a= dataSnapshot1.getValue(A.class);
tkey.add(dataSnapshot1.getKey());
//add the name into an String arraylist named searchnamestate searchnamestate.add(dataSnapshot1.getValue(A.class).getName().toLowerCase());
t.add(a);
}
for (DataSnapshot dataSnapshot1 : dataSnapshot.child("company").getChildren()) {
A comp = dataSnapshot1.getValue(A.class);
//add the state into an String arraylist named searchnamestate searchnamestate.add(dataSnapshot1.getValue(A.class).getState().toLowerCase());
c.add(comp);
}
adapter = new MyRecyclerViewAdapter(MainActivity.this, t,c, tkey);
rv.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(getApplicationContext(), "Oh no!", Toast.LENGTH_SHORT).show();
}
});
//searchview filter the information display in recyclerview based on what type
//in the searchview
search.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
// adapter.getFilter().filter(newText);
String newquery= newText.toLowerCase();
for(int i=0; i<searchnamestate.size();i++) {
if (searchnamestate.get(i).contains(newquery)) {
adapter.filter(newquery);
}
else{
// Toast.makeText(MainActivity.this, "No Match found", Toast.LENGTH_LONG).show();
}
}
return false;
}
});
}
Вот мой класс адаптера
ArrayList<Therapist> tlist;
ArrayList<Therapist> newtlist;
ArrayList<Therapist> complist;
//the t is using the second constructor while comp is the third constuctor in //Object class
public MyRecyclerViewAdapter(Context c, ArrayList<A> t, ArrayList<A> comp, ArrayList<String> tk ){
context=c;
tlist=t;
complist=comp;
//add all the element from tlist into newtlist
this.newtlist = new ArrayList<A>();
this.newtlist.addAll(t);
tkey=tk;
}
public void filter(String findtext) {
// findtext = findtext.toLowerCase(Locale.getDefault());
tlist.clear();
if (findtext.length() == 0) {
tlist.addAll(newtlist);
} else {
for (A wp : newtlist) {
//if the name type in searchview match name that stored in newtlist, it can filter based in name
if (wp.getName().toLowerCase(Locale.getDefault()).contains(findtext)) {
tlist.add(wp);
}
}
}
notifyDataSetChanged();
}
@Override
public int getItemCount() {
return tlist.size();
}