【发布时间】:2020-11-30 15:07:04
【问题描述】:
如果过滤后的搜索是由微调器制成的,我正在尝试建立一个商店。起初我尝试只使用其中的两个,并且效果很好。当我尝试拥有第三个时,问题就来了。微调器数据用于在 firebase 数据库中进行搜索。我不知道使用两个或三个微调器有什么不同。如果有人可以帮助我,我将非常感激
过滤的搜索片段*
public class FilterFragment extends Fragment
implements AdapterView.OnItemSelectedListener{
public FilterFragment() {
// Required empty public constructor
}
String txtBrand,txtKind, subKing;
Spinner spinBrand,spinKind, spinSubkind;
RecyclerView rv;
List<String>Brands;
List<String>Kinds;
List<Producto> productslist;
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);
spinBrand=v.findViewById(R.id.spinnerMarca);
spinKind=v.findViewById(R.id.spinnerTipoPieza);
spinSubKind=v.findViewById(R.id.spinnerSubtipo);
rv=v.findViewById(R.id.rvAvanzado);
Brands= Arrays.asList(getResources().getStringArray(R.array.marcas));
Kinds= Arrays.asList(getResources().getStringArray(R.array.tiposPiezas));
mReference= FirebaseDatabase.getInstance().getReference("Product");
spinBrand.setOnItemSelectedListener(this);
spinKind.setOnItemSelectedListener(this);
spinSubKind.setOnItemSelectedListener(this);
return v;
}
public void loadRecycler(final String Marca, String Tipo, final String SubTipo){
rv.setLayoutManager(new LinearLayoutManager(getContext()));
productoslist= new ArrayList<>();
adapterAllProducts = new AdapterAllProducts(productoslist,getActivity());
adapterAllProducts.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Producto prod = productoslist.get(rv.getChildAdapterPosition(v));
String pid = prod.getPid();
Preferencias.setPid(getActivity(),pid);
Fragment fragmentuser = new ProductsFragment();
FragmentManager ManagerUser = getFragmentManager();
FragmentTransaction transactionUser = ManagerUser.beginTransaction();
transactionUser.replace(R.id.contentfragment,fragmentuser);
transactionUser.commit();
}
});
rv.setAdapter(adapterAllProducts);
if (Brand.equals("Brands")&&Tipo.equals("Tipos")&&SubTipo.equals("subtipos")){
mReferencia.child("Product").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
productoslist.clear();
for (DataSnapshot Snapshot : snapshot.getChildren()
) {
Producto producto = Snapshot.getValue(Producto.class);
productoslist.add(producto);
}
adapterAllProducts.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}else{
if(!Brand.equals("Brands")&&Tipo.equals("Tipos")&&SubTipo.equals("subtipos")){
Query q = mReferencia.orderByChild("marca").equalTo(Marca);
q.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
productoslist.clear();
for (DataSnapshot Snapshot : snapshot.getChildren()
) {
Producto producto = Snapshot.getValue(Producto.class);
productoslist.add(producto);
}
adapterAllProducts.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
else if (Brand.equals("Brands") && !Tipo.equals("Tipos")&&SubTipo.equals("subtipos")){
Query q = mReferencia.orderByChild("tipo").equalTo(Tipo);
q.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
productoslist.clear();
for (DataSnapshot Snapshot : snapshot.getChildren()
) {
Producto producto = Snapshot.getValue(Producto.class);
productoslist.add(producto);
}
adapterAllProducts.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
else if (Brand.equals("Brands") && !Tipo.equals("Tipos")&&!SubTipo.equals("subtipos")){
Query q = mReferencia.orderByChild("tipo").equalTo(Tipo);
q.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
productoslist.clear();
for (DataSnapshot Snapshot : snapshot.getChildren()
) {
Producto producto = Snapshot.getValue(Producto.class);
if (producto.getSubtipo().equals(SubTipo)) {
productoslist.add(producto);
}
}
adapterAllProducts.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
else if (!Brand.equals("Brands") && !Tipo.equals("Tipos")&&!SubTipo.equals("subtipos")){
Query q = mReferencia.orderByChild("tipo").equalTo(Tipo);
q.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
productoslist.clear();
for (DataSnapshot Snapshot : snapshot.getChildren()
) {
Producto producto = Snapshot.getValue(Producto.class);
if (producto.getMarca().equals(Marca)){
if (producto.getSubtipo().equals(SubTipo)) {
productoslist.add(producto);
}
}
}
adapterAllProducts.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
}
public String FillspinSubKind(String txtSubKind){
switch (subTipo){
case "boots":
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(),R.array.subkind_boots,R.layout.support_simple_spinner_dropdown_item);
spinSubTipo.setAdapter(adapter);
txtSubKind = spinSubTipo.getSelectedItem().toString();
break;
case "Sports":
ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(getActivity(),R.array.subkind_sports,R.layout.support_simple_spinner_dropdown_item);
spinSubTipo.setAdapter(adapter1);
txtSubKind= spinSubTipo.getSelectedItem().toString();
break;
case "Formal":
ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(getActivity(),R.array.subkind_formal,R.layout.support_simple_spinner_dropdown_item);
spinSubTipo.setAdapter(adapter2);
txtSubKind= spinSubTipo.getSelectedItem().toString();
break;
case "Merchandising":
ArrayAdapter<CharSequence> adapter3 = ArrayAdapter.createFromResource(getActivity(),R.array.subkind_merch,R.layout.support_simple_spinner_dropdown_item);
spinSubTipo.setAdapter(adapter3);
txtSubKind= spinSubTipo.getSelectedItem().toString();
break;
}
return txtSubTipo;
}
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
txtMarca = spinMarca.getSelectedItem().toString();
txtTipo = spinTipo.getSelectedItem().toString();
FillspinSubKind(txtKind);
loadRecycler(txtMarca,txtTipo,txtSubKind);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}}
我会感谢任何提供帮助的人。 后数据:英语不是我的母语,所以我为我的英语水平道歉。我也尝试从代码中翻译名称。
【问题讨论】:
标签: java android firebase-realtime-database android-recyclerview spinner