如何在应用Android Studio的特定“Activity(Page)”中实现搜索功能

qq24tv8q  于 2022-11-16  发布在  Android
关注(0)|答案(1)|浏览(142)

我在管理活动(页面)中有包含数据库(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);
    }
}
busg9geu

busg9geu1#

在我的项目中,我也使用Firebase搜索了所有相关的数据库。我所做的是使用用户在搜索栏中输入的字符串,遍历整个RealTime数据库,并检查是否包含请求。如果包含,则返回/保存它。由于您没有使用搜索行(据我所知,您希望以管理员身份进行搜索),您需要创建一个字符串来遍历整个数据库(在RealTimeDB中-我只是浏览组成字段的子项(.child)的名称)。
我附上一个代码,我是如何做到这一点,并链接到该项目。欢迎你问我高兴。
我的例子:

private void performSearch() {
    recyclerViewShow(false);
    final String searchString = mSearchEditText.getText().toString();
    mDbUser.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            final List<UserCoach> CoachList = new ArrayList<>();
            for (DataSnapshot CoachUser : dataSnapshot.getChildren()) {
                if (CoachUser.child("coachUserName").exists()) {      // if coach user is in firebase
                    System.out.println("Test Test Test");
                        String searchCoachUserName = (String) CoachUser.child("coachUserName").getValue(); // search by name
                        String searchCoachAddress = (String) CoachUser.child("address").getValue(); //search by address
                        if (searchCoachAddress.contains(searchString) || searchCoachUserName.contains(searchString)) {
                            String age = (String) CoachUser.child("age").getValue();
                            String imageUrl = (String) CoachUser.child("profileUrl").getValue();
                            String address = (String) CoachUser.child("address").getValue();
                            String experience = (String) CoachUser.child("experience").getValue();
                            String education = (String) CoachUser.child("education").getValue();
                            String CoachUserName = (String) CoachUser.child("coachUserName").getValue();
                            String gender = (String) CoachUser.child("gender").getValue();
                            CoachList.add(new UserCoach(imageUrl, CoachUserName, experience,education,age,address));
                        }
                }
            mAdapter.setNewItems(CoachList);
            recyclerViewShow(true);
        }

完整代码-https://github.com/EladVaknin/Journey

相关问题