【发布时间】:2023-03-24 13:51:01
【问题描述】:
我必须做一个服装店应用程序,我正在尝试使用 2 个微调器和一个 recyclerView 进行过滤搜索。问题是我不知道如何过滤它。数据是从 firebase 下载的。问题是我想成为一个动态回收者,所以如果我选择其中一个选项,我希望看到请求。所以我的问题是我不知道如何知道使用了两个微调器中的哪一个。两个微调器必须单独工作,但它们相互补充。
这是我的代码。
String txtBrand,txtKind;
Spinner spinBrand,spinKind;
RecyclerView rv;
List<String>Brands;
List<Producto> productlist;
AdapterAllProducts adapterAllProducts;
public DatabaseReference mReference;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v =inflater.inflate(R.layout.filter_fragment, container, false);
spinMarca=v.findViewById(R.id.spinnerBrand);
spinTipo=v.findViewById(R.id.spinnerKind);
rv=v.findViewById(R.id.rv);
Brands= Arrays.asList(getResources().getStringArray(R.array.brands));
mReference= FirebaseDatabase.getInstance().getReference("Product");
spinBrand.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
txtBrand = Brands.get(i);
loadRecycler(txtBrand);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
return v;
}
public void loadRecycler(final String Marca){
rv.setLayoutManager(new LinearLayoutManager(getContext()));
productslist= new ArrayList<>();
adapterAllProducts = new AdapterAllProducts(productslist,getActivity());
adapterAllProducts.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Product prod = productslist.get(rv.getChildAdapterPosition(v));
String pid = prod.getPid();
String name = prod.getName();
String desc = prod.getDescription();
String ref = prod.getReference();
float pri = (float)prod.getPrize();
int cant = prod.getQuantity();
String brand = prod.getBrand();
Preferencias.setPid(getActivity(),pid);
Preferencias.setName(getActivity(),nombre);
Preferencias.setPrize(getActivity(),pre);
Preferencias.setReference(getActivity(),ref);
Preferencias.setDesc(getActivity(),desc);
Preferencias.setQuantity(getActivity(),cant);
Preferencias.setBrand(getActivity(),brand);
Fragment fragment = new ProductsFragment();
FragmentManager ManagerUser = getFragmentManager();
FragmentTransaction transactionUser = ManagerUser.beginTransaction();
transactionUser.replace(R.id.contentfragment,fragmentuser);
transactionUser.commit();
}
});
rv.setAdapter(adapterAllProducts);
Query q = mReference.orderByChild("brand").equalTo(brand);
q.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
productoslist.clear();
for (DataSnapshot Snapshot : snapshot.getChildren()
) {
Product product = Snapshot.getValue(Product.class);
productslist.add(product);
}
adapterAllProducts.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}}
我为我的英语道歉。这不是我的母语。如果有人可以帮助我,我将非常感谢他们。
【问题讨论】:
-
嗨,你为什么要区分这两个微调器?只需使用从 firebase/local 列表中获取的数据(如果您拥有所有数据)并将列表传递给您的 RecyclerView 适配器并通知它。
-
问题是我希望可以选择使用其中一个过滤器或两个过滤器进行搜索。所以我需要知道选择了哪一个来显示所有具有该共同标记的产品。例如,我想选择搜索“耐克”并查看其中的所有产品,如果在第二个微调器中选择“鞋子”,我想显示所有带有耐克令牌的鞋子
-
@AsthaGarg 我还想选择搜索“鞋子”并查看我数据库中的所有鞋子
-
你可以使用 String text = mySpinner.getSelectedItem().toString();从微调器中获取选定的文本并作为请求传递给您的服务器/数据库查询。
-
@AsthaGarg 我认为它有效。至少在一些产品的测试过程中。我不知道当我在数据库中有更多产品时会发生什么。但是知道它有效
标签: java android android-studio android-recyclerview android-spinner