【问题标题】:How to load a recyclerView from 2 different spinner如何从 2 个不同的微调器加载 recyclerView
【发布时间】: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


【解决方案1】:

基本思想是当用户尝试更改他的过滤器或当用户关闭您的过滤器弹出窗口时从spinners 中读取。这种方式只需添加对 null/blank/Default 文本的检查,显示为 spinner 的第 0 个索引

String text1 = mySpinner1.getSelectedItem().toString() 
String text2 = mySpinner2.getSelectedItem().toString()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多