当我在搜索视图中键入某些内容时,它只会显示第一个项目。
我创建了一个简单的数据库,其中包含:A,B和C。但是当我在搜索视图中键入例如B时,它只会显示项目。当我删除文本时,a,b和c在我的listView中显示,如果我键入d,则在我的listView中没有显示任何内容(如它应该(。
有人知道如何解决此问题吗?
模型类:
public class Verktoy {
String verktøynavn;
String verktøytype;
String verktøystatus;
String utlånttil;
@Override
public String toString() {
return verktøynavn;
}
public Verktoy() {
}
public Verktoy(String verktøynavn, String verktøytype, String verktøystatus, String utlånttil) {
this.verktøynavn = verktøynavn;
this.verktøytype = verktøytype;
this.verktøystatus = verktøystatus;
this.utlånttil = utlånttil;
}
public String getVerktøynavn() {
return verktøynavn;
}
public String getVerktøytype() {
return verktøytype;
}
public String getVerktøystatus() {
return verktøystatus;
}
public String getUtlånttil() {
return utlånttil;
}
适配器:
public class listVerktoy extends ArrayAdapter<Verktoy> {
private Activity context;
private List<Verktoy> listverktoy;
public listVerktoy(Activity context, List<Verktoy> listverktoy){
super (context, R.layout.list_verktoyalt, listverktoy);
this.context = context;
this.listverktoy = listverktoy;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View listViewItem = inflater.inflate(R.layout.list_verktoyalt, null, true);
TextView tvverktøynavnlist = (TextView)listViewItem.findViewById(R.id.tvverktøynavnlist);
TextView tvverktøytypelist = (TextView)listViewItem.findViewById(R.id.tvverktøytypelist);
TextView tvverktøystatuslist = (TextView)listViewItem.findViewById(R.id.tvverktøystatuslist);
TextView tvutlånttil = (TextView)listViewItem.findViewById(R.id.tvutlånttil);
Verktoy verktoy = listverktoy.get(position);
tvverktøynavnlist.setText(verktoy.getVerktøynavn());
tvverktøytypelist.setText(verktoy.getVerktøytype());
tvverktøystatuslist.setText(verktoy.getVerktøystatus());
tvutlånttil.setText(verktoy.getUtlånttil());
return listViewItem;
mainactivty:
public class Verktoyliste extends AppCompatActivity {
DatabaseReference databaseVerktøy;
Button btnleggtilverktøy;
ListView lvverktøylistealt;
Button button3;
SearchView schverktøy;
List<Verktoy> listverktoy;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_verktoyliste);
databaseVerktøy = FirebaseDatabase.getInstance().getReference("Verktøy");
lvverktøylistealt = (ListView) findViewById(R.id.lvverktøylistealt);
schverktøy = (SearchView) findViewById(R.id.schverktøy);
btnleggtilverktøy = (Button) findViewById(R.id.btnleggtilverktøy);
listverktoy = new ArrayList<>();
@Override
protected void onStart() {
super.onStart();
databaseVerktøy.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(final DataSnapshot dataSnapshot) {
listverktoy.clear();
for (DataSnapshot verktoySnapshot : dataSnapshot.getChildren()) {
Verktoy verktoy = verktoySnapshot.getValue(Verktoy.class);
listverktoy.add(verktoy);
final listVerktoy adapter = new listVerktoy(Verktoyliste.this, listverktoy);
lvverktøylistealt.setAdapter(adapter);
schverktøy.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
adapter.getFilter().filter(query);
databaseVerktøy.orderByChild("verktøynavn").equalTo(query);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
adapter.getFilter().filter(newText);
databaseVerktøy.orderByChild("verktøynavn").equalTo(newText);
adapter.notifyDataSetChanged();
return true;
}
});
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
执行此代码时:
databaseVerktøy.orderByChild("verktøynavn").equalTo(newText);
它返回一个新查询,它确实会不是修改现有的查询。因此,每次您想在新条件下过滤时,都需要:
基于新的过滤器创建一个新查询
Query query = databaseVerktøy.orderByChild("verktøynavn").equalTo(newText);
将听众附加到此新查询。
使用此新查询的结果创建一个新的适配器,或更新现有的适配器。