我在管理活动(页面)中有包含数据库(Firebase)数据的回收器视图。
有姓名,IC,电话,票...信息的用户。和我的管理员活动(页)有回收器视图,其中包含列表的用户与他们的数据(信息)。
我设法使搜索函数,但它只搜索“一个”字符串,如只有名称或只有IC...,总的来说,我的函数只搜索“一个”变量。
是否可以在Android Studio(Java)中搜索屏幕上或该活动上出现的所有文本的功能?
简而言之,我想搜索用户作为管理员,由他们的姓名,IC,电话..与任何数据(信息),他们有。
public class ActivityOfficer extends AppCompatActivity {
RecyclerView recyclerView;
MainAdapter mainAdapter;
DatabaseReference root;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_officer);
recyclerView = (RecyclerView) findViewById(R.id.rv);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
}
@Override
protected void onStart () {
super.onStart();
root = FirebaseDatabase.getInstance().getReference().child("Users").child("Visitors");
if (root != null) {
root.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if(snapshot.exists()) {
FirebaseRecyclerOptions<Model> options =
new FirebaseRecyclerOptions.Builder<Model>()
.setQuery(root, Model.class)
.build();
mainAdapter = new MainAdapter(options);
mainAdapter.startListening();
recyclerView.setAdapter(mainAdapter);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
@Override
protected void onStop () {
super.onStop();
mainAdapter.startListening();
}
@Override
public boolean onCreateOptionsMenu (Menu menu){
getMenuInflater().inflate(R.menu.search, menu);
MenuItem item = menu.findItem(R.id.search);
SearchView searchView = (SearchView) item.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
txtSearch(s);
return false;
}
@Override
public boolean onQueryTextChange(String s) {
txtSearch(s);
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
搜索功能,正如你现在可以看到它只搜索用户(游客)的“票号”。
private void txtSearch(String s) {
FirebaseRecyclerOptions<Model> options =
new FirebaseRecyclerOptions.Builder<Model>()
.setQuery(root.orderByChild("visitorticket").startAt(s).endAt(s + "~"), Model.class)
.build();
mainAdapter = new MainAdapter(options);
mainAdapter.startListening();
recyclerView.setAdapter(mainAdapter);
}
}
1条答案
按热度按时间busg9geu1#
在我的项目中,我也使用Firebase搜索了所有相关的数据库。我所做的是使用用户在搜索栏中输入的字符串,遍历整个RealTime数据库,并检查是否包含请求。如果包含,则返回/保存它。由于您没有使用搜索行(据我所知,您希望以管理员身份进行搜索),您需要创建一个字符串来遍历整个数据库(在RealTimeDB中-我只是浏览组成字段的子项(.child)的名称)。
我附上一个代码,我是如何做到这一点,并链接到该项目。欢迎你问我高兴。
我的例子:
完整代码-https://github.com/EladVaknin/Journey