当我在searchview中输入内容时,它只显示第一个项目(FIREBASE)

时间:2018-02-08 20:30:15

标签: android listview firebase firebase-realtime-database searchview

当我在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) {
        }
    });
}

1 个答案:

答案 0 :(得分:0)

执行此代码时:

databaseVerktøy.orderByChild("verktøynavn").equalTo(newText);

它返回一个新查询,修改现有查询。因此,每当您想要过滤新条件时,您需要:

  1. 根据新过滤器

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

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