1

I am trying to implement a search function for users in android studio using firebaseRecyclerAdapter. What i want is for the user to type in the other users in the edit text field and carry out a search using firebase recycler adapter to display the results of the search. The new firebase UI requires the firebase adapter to be defined differently and in the on create method. I am not sure how to implement a search query using the new firebase adapter.

SearchUserActivity:

public class SearchUserActivity extends AppCompatActivity {


private RecyclerView mRecyclerView;
private EditText mSearchField;
private ImageButton mSearchButton;
private DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Users");
FirebaseRecyclerAdapter adapter;

@Override
protected void onStart() {
    super.onStart();
    adapter.startListening();
}

@Override
protected void onStop() {
    super.onStop();
    adapter.stopListening();
}



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

    mRecyclerView = findViewById(R.id.recyclerView);
    mSearchButton = findViewById(R.id.searchButton);
    mSearchField = findViewById(R.id.firebaseSearch);


    //mRecyclerView.setHasFixedSize(true);
    mSearchButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            //firebaseUserSearch(searchText);
            String searchText = mSearchField.getText().toString();

            Query firebaseSearchQuery = databaseReference.orderByChild("name")
                    .startAt(searchText)
                    .endAt(searchText + "\uf8ff");

            FirebaseRecyclerOptions<UserInfo> options = new FirebaseRecyclerOptions.Builder<UserInfo>()
                    .setQuery(firebaseSearchQuery, UserInfo.class).build();

            adapter = new FirebaseRecyclerAdapter<UserInfo, UsersViewHolder>(options) {

                @NonNull
                @Override
                public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.user_layout, parent, false);

                    return new UsersViewHolder(view);
                }

                @Override
                protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull UserInfo model) {
                    holder.setDetails(model.name, model.status);
                }
            };
            mRecyclerView.setLayoutManager(new LinearLayoutManager(SearchUserActivity.this));
            mRecyclerView.setAdapter(adapter);

        }
        });
    };


private void firebaseUserSearch(String searchText) {

}




// viewholder class

public class UsersViewHolder extends RecyclerView.ViewHolder {

    View mView;

    public UsersViewHolder(View itemView) {
        super(itemView);
        mView = itemView;
    }


    public void setDetails(String userName,String userStatus) {
        TextView name = mView.findViewById(R.id.name);
        TextView status = mView.findViewById(R.id.status);


        name.setText(userName);
        status.setText(userStatus);

        }

    }
}

I want to set a on click listener for search inside on create method. However, i cant initialize firebase adapter inside the on click listener as during the on start method i have to set adapter start listening in the on create method.

calveeen
  • 621
  • 2
  • 10
  • 28
  • Check **[this](https://stackoverflow.com/questions/50682046/applying-word-stemming-in-searchview-for-fetch-data-from-firebase-database/50682657)** out. – Alex Mamo Jun 21 '18 at 07:17

0 Answers0