当我在搜索视图中键入某些内容时,它仅显示第一个项目(firebase)



当我在搜索视图中键入某些内容时,它只会显示第一个项目。

我创建了一个简单的数据库,其中包含: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);

它返回一个新查询,它确实会不是修改现有的查询。因此,每次您想在新条件下过滤时,都需要:

  1. 基于新的过滤器创建一个新查询

    Query query = databaseVerktøy.orderByChild("verktøynavn").equalTo(newText);
    
  2. 将听众附加到此新查询。

  3. 使用此新查询的结果创建一个新的适配器,或更新现有的适配器。

相关内容

  • 没有找到相关文章

最新更新