【发布时间】: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);
}
谢谢!
【问题讨论】:
-
请看我在这个 post 的回答。几分钟前才回答。是完全相同的问题。我不能标记为重复,因为它还没有被接受。如果您遵循所有这些步骤,肯定会奏效。
标签: android firebase firebase-realtime-database android-recyclerview firebaseui