java - 如何从 2 个不同的微调器加载 recyclerView
问题描述
我必须做一个服装店应用程序,我正在尝试使用 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) {
}
});
}}
我为我的英语道歉。这不是我的母语。如果有人可以帮助我,我将非常感激他们。
解决方案
基本思想是从spinners
用户尝试更改过滤器时或用户关闭过滤器弹出窗口时读取。这种方式只需添加对显示为第 0 个索引的 null/blank/Default 文本的检查spinner
String text1 = mySpinner1.getSelectedItem().toString()
String text2 = mySpinner2.getSelectedItem().toString()
推荐阅读
- c# - NUnit TestRunner 工作目录因项目的目标框架而异
- angular - Angular slickgrid 不允许使用整数编辑器为空值
- django - OpenEDX CMS,我们在渲染您的组件时遇到问题
- node.js - MongoDB 在 Windows 10 机器上拒绝连接
- java - 正则表达式不适用于 Android Studio 中字符串前面的特殊字符
- r - 在 R 中使用 summarise() 的输出
- php - 将非 www 重定向到 www 但绕过 static.domain.com url?
- java - 如何从java中的字符串指定类属性
- java - Javamail IMAP - 按日期搜索邮件返回错误结果
- angular - 如何从 forkJoin 返回数据作为不可观察的元组?