我´我试图使一个商店被过滤搜索是由纺纱机。一开始我试着只用其中的两个,效果很好。当我试着要第三个的时候问题就来了。微调器数据用于在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) {
}}
我´我会感激任何帮助我的人。发帖资料:英语不是我的母语,所以我为我的英语水平道歉。我也试着翻译代码中的名字。
2条答案
按热度按时间ql3eal8s1#
我决定感谢你的帮助,但最后我看到了我的无限循环,这是onitemclicklistener方法的问题,最后我把这个方法的数据改成了一个开关,它工作得很好。我就是这样做的
rkttyhzu2#
是什么
spinSubTipo
? 在哪里示例化?如果我猜对了,一定是一样的spinSubKind
. 所以如果这是真的,你设定了一个OnItemSelectedListener
为了spinSubKind
而在onItemSelected
你打电话来FillspinSubKind
方法和步骤FillspinSubKind
你打电话来spinSubTipo.setAdapter
那个原因OnItemSelectedListener
的spinSubKind
将会触发循环。