【问题标题】:Firebase Search with FirebaseRecyclerAdapter (Firebase UI 3.2.2)使用 FirebaseRecyclerAdapter 进行 Firebase 搜索(Firebase UI 3.2.2)
【发布时间】:2023-03-12 05:10:02
【问题描述】:

我有一个片段,我在其中使用 RecyclerView 显示 Firebase DB 中的所有对象。在同一个片段中,我有一个 EditText。

目标:用户可以在 Firebase 数据库中进行搜索。搜索结果应填充到相同的 RecyclerView 中,其中最初显示来自数据库的所有对象。出于这个原因,我正在使用 FirebaseUI 版本 3.2.2 提供的 FirebaseRecyclerAdapter。为了达到这个结果,我关注了这个 YouTube 教程https://www.youtube.com/watch?v=b_tz8kbFUsU

问题:结果不显示,搜索功能不工作。

这是我的代码。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         final Bundle savedInstanceState) {

    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_best_buys, container, false);

    recView = view.findViewById(R.id.fragment_best_buys_recycler_view_two);
    databaseReference = FirebaseDatabase.getInstance().getReference(Database_Path);

        // Edit Text Listener
    mEditText = view.findViewById(R.id.fragment_best_buys_edit_text);
    Button test = view.findViewById(R.id.faccia_search);
    test.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String searchText = mEditText.getText().toString();
            firebaseUserSearch(searchText);
        }
    });

    return view;
}

private void firebaseUserSearch(String searchText) {

    System.out.print("I am searching: " + searchText);

    Toast.makeText(getActivity(), "Started Search " + searchText, Toast.LENGTH_LONG).show();

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

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

    FirebaseRecyclerAdapter<BestBuysProducts, BestBuysViewHolder> adapter = new FirebaseRecyclerAdapter<BestBuysProducts, BestBuysViewHolder>(options) {
        @Override
        public BestBuysViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_best_buys, parent, false);
            return new BestBuysViewHolder(view);
        }

        @Override
        protected void onBindViewHolder(@NonNull BestBuysViewHolder holder, int position, @NonNull BestBuysProducts model) {
            holder.setDetails(getContext(), model.getProduct_name());

        }};

    recView.setLayoutManager(new LinearLayoutManager(getContext()));
    recView.setAdapter(adapter);

}

查看持有者类

public static class BestBuysViewHolder extends RecyclerView.ViewHolder {

    View mView;

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


    public void setDetails(final Context ctx, final String productName) {
        TextView titleTextView = itemView.findViewById(R.id.item_best_buys_title);
        titleTextView.setText(productName);
    }

谢谢!

【问题讨论】:

标签: android firebase firebase-realtime-database android-recyclerview firebaseui


【解决方案1】:
private void firebaseUserSearch(String searchText) {

    /*Toast.makeText(AllUserActivity.this, "Started Search", Toast.LENGTH_LONG).show();*/
    progressBar.setVisibility(View.VISIBLE);


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

    //set Options
    FirebaseRecyclerOptions<Users> options =
            new FirebaseRecyclerOptions.Builder<Users>()
                    .setQuery(firebaseSearchQuery, Users.class)
                    .setLifecycleOwner(this)
                    .build();

    adapter = new FirebaseRecyclerAdapter<Users, UserviewHolder>(options) {
        @Override
        protected void onBindViewHolder(@NonNull UserviewHolder holder, int position, @NonNull Users model) {

            holder.setNama(model.getName());

            holder.setstatus(model.getAddress());
            holder.setMcCircleImageView(model.getThumb_image());

            progressBar.setVisibility(View.GONE);





            final String user_id = getRef(position).getKey();

            holder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {


                    if (!user_id.equals(FirebaseAuth.getInstance().getCurrentUser().getUid())){

                        Intent i = new Intent(AllUserActivity.this, ProfilActivity.class);
                        i.putExtra("user_id", user_id);
                        startActivity(i);
                    }else {
                        Intent i = new Intent(AllUserActivity.this, AcountSettings.class);
                        i.putExtra("user_id", user_id);
                        startActivity(i);
                    }

                }
            });
        }

        @NonNull
        @Override
        public UserviewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View mView = LayoutInflater.from(parent.getContext()).inflate(R.layout.user_singgle_layout, parent, false);
            return new UserviewHolder(mView);
        }
    };

    mListView.setAdapter(adapter);

}

private void closeKeyboard(){
    View view = this.getCurrentFocus();
    if (view != null){
        InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        if (inputMethodManager != null) {
            inputMethodManager.hideSoftInputFromInputMethod(view.getWindowToken(), 0);
        }
    }
}
@Override
protected void onStart() {
    super.onStart();


    //important for fibrebase database ui
    adapter.startListening();




}

@Override
protected void onStop() {
    super.onStop();
    //important for fibrebase database ui
    adapter.stopListening();
}

//VIEW HOLDER
public class UserviewHolder extends RecyclerView.ViewHolder {
    View mView;
    TextView mdisplayname,mstatus ;
    CircleImageView mcCircleImageView;
    public UserviewHolder(View itemView) {
        super(itemView);
        mView = itemView;

        mdisplayname = (TextView) mView.findViewById(R.id.user_singgle_name);
        mstatus  = (TextView) mView.findViewById(R.id.user_single_status);
        mcCircleImageView = (CircleImageView) mView.findViewById(R.id.profil_single_layout);



    }
    public void setNama(String display_name){

        mdisplayname.setText(display_name);

    }
    public void setstatus(String status){
        mstatus.setText(status);
    }
    public  void setMcCircleImageView(final String img_uri){
        //Picasso.with(UsersActivity.this).load(img_uri).placeholder(R.drawable.user).into(mcCircleImageView);
        if (!img_uri.equals("default")){
            Picasso.with(AllUserActivity.this).load(img_uri).networkPolicy(NetworkPolicy.OFFLINE)
                    .placeholder(R.drawable.default_avatar).into(mcCircleImageView, new Callback() {
                @Override
                public void onSuccess() {

                }

                @Override
                public void onError() {
                    Picasso.with(AllUserActivity.this).load(img_uri).placeholder(R.drawable.default_avatar).into(mcCircleImageView);

                }
            });

        }else{
            Picasso.with(AllUserActivity.this).load(R.drawable.default_avatar).into(mcCircleImageView);

        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    相关资源
    最近更新 更多