当我在searchview中输入内容时,它只显示第一项。
我创建了一个简单的数据库,包含: A,B和C.但是当我在我的搜索视图中键入例如B时,它只显示项目A. 当我删除我的文本时,A,B和C显示在我的列表视图中,如果我输入D,我的列表视图中没有显示任何内容(就像它应该的那样)。
有谁知道如何解决这个问题?
模特课程:
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) {
}
});
}
答案 0 :(得分:0)
执行此代码时:
databaseVerktøy.orderByChild("verktøynavn").equalTo(newText);
它返回一个新查询,不修改现有查询。因此,每当您想要过滤新条件时,您需要:
根据新过滤器
创建新查询Query query = databaseVerktøy.orderByChild("verktøynavn").equalTo(newText);
将侦听器附加到此新查询。
使用此新查询的结果创建新适配器,或更新现有查询。