gpt4 book ai didi

android - 使用 Firestore 按键入的字母搜索

转载 作者:行者123 更新时间:2023-11-29 23:49:47 25 4
gpt4 key购买 nike

我尝试使用我在 EditText 中键入的字母将搜索集成到 Firestore 集合中。我的意思是,我怎样才能在没有任何按钮的情况下做到这一点,只是实时搜索,也就是说,当我在 EditText 中键入任何字母时,结果会出现在 ListView 中。

我的类(class),我从 Firestore 中检索了所有记录:

public class AllPlaces extends AppCompatActivity {

private EditText eName;
private ListView mList;

private FirebaseFirestore firestore = FirebaseFirestore.getInstance();
private CollectionReference reference = firestore.collection("Users");
private SearchAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_all_places);

mList = findViewById(R.id.listSearch);
eName = findViewById(R.id.editSearch);

reference.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
List<SearchModel> names = new ArrayList<>();
if(task.isSuccessful()){
for(QueryDocumentSnapshot document : task.getResult()) {
SearchModel model = document.toObject(SearchModel.class);
names.add(model);
}
mList = findViewById(R.id.listSearch);
adapter = new SearchAdapter(AllPlaces.this, names);
mList.setAdapter(adapter);
}
}
});
}
}

更新:

我找到了这个解决方案,但它没有正常工作,当我输入一些字母时 - 所有信息都从 ListView 中消失:

eName.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {

AllPlaces.this.adapter.getFilter().filter(s);
}

@Override
public void afterTextChanged(Editable s) {

}
});

最佳答案

private FirebaseFirestore firestore = FirebaseFirestore.getInstance();
private CollectionReference reference = firestore.collection("Users");
Query q;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_all_places);

q = firestore.collection("Users");
showAdapter(q);

eName.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}

@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (charSequence.toString().length() == 0) {
q = firestore.collection("Users");
showAdapter(q);
} // This is used as if user erases the characters in the search field.
else {
q = reference.orderBy("name").startAt(charSequence.toString().trim()).endAt(charSequence.toString().trim() + "\uf8ff"); // name - the field for which you want to make search
showAdapter(q);
}
adapter.notifyDataSetChanged();
}
@Override
public void afterTextChanged(Editable editable) {
}
});

void showAdapter(Query q1) {
q1.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
List<SearchModel> names = new ArrayList<>();
if(task.isSuccessful()){
for(QueryDocumentSnapshot document : task.getResult()) {
SearchModel model = document.toObject(SearchModel.class);
names.add(model);
}
mList = findViewById(R.id.listSearch);
adapter = new SearchAdapter(AllPlaces.this, names);
mList.setAdapter(adapter);
}
}
});
}

我希望这会有所帮助..

关于android - 使用 Firestore 按键入的字母搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51005781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com