为了账号安全,请及时绑定邮箱和手机立即绑定

我想从 Firebase 获取产品 ID

我想从 Firebase 获取产品 ID

富国沪深 2023-03-31 09:58:27
我正在从 Firebase 检索产品信息,但问题是我无法选择存储在 Firebase 中的任何特定 ID。我尝试了不同的解决方案来解决这个问题,get(position)但它正在获取产品在 RecyclerView 中的位置这是 ProductsAdapteronBindViewHolder函数。使用 * 添加更改    @Override    public void onBindViewHolder(@NonNull ProductViewHolder holder, int position) {        Product productCurrent = mProducts.get(position);        holder.product_title.setText(toCapitalize(productCurrent.getpTitle()));        holder.product_pice.setText("$: " + productCurrent.getpPrice());        Picasso.with(mContext)                .load(productCurrent.getpImageUrl())                .placeholder(R.mipmap.ic_launcher)                .fit()                .centerCrop()                .into(holder.product_image);        holder.parentLayout.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent(mContext, ProductPreview.class);                intent.putExtra("pImageUrl", productCurrent.getpImageUrl());                intent.putExtra("pTitle", toCapitalize(productCurrent.getpTitle()));                intent.putExtra("pPrice", productCurrent.getpPrice());                intent.putExtra("pDescription", toCapitalize(productCurrent.getpDescription()));                Toast.makeText(mContext, " " + position, Toast.LENGTH_SHORT).show();                mContext.startActivity(intent);            }        });    }此代码来自 ProductsActivity 具有RecyclerView    private ProductsAdapter mAdapter;    private ProgressBar mProgressBar;    DatabaseReference mDatabaseReference;    private ArrayList<Product> mProducts;    ***ArrayList<ProductKeys> mProductKeys;***
查看完整描述

2 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

如果您尝试在position方法中确定项目的 Firebase 数据库 ID onBindViewHolder,则必须自己维护该映射。您可以通过从快照中提取getKey()和并保留它们的列表来轻松地做到这一点。getValue()onDataChange


是这样的:


mProductKeys = new ArrayList<String>();


mDatabaseReference.addValueEventListener(new ValueEventListener() {

    @Override

    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

        for (DataSnapshot postSnapShot : dataSnapshot.getChildren())

        {

            Product product = postSnapShot.getValue(Product.class);

            mProducts.add(product);

            mProductKeys.add(postSnapShot.getKey());

        }

        mAdapter = new ProductsAdapter(ProductsActivity.this, mProducts);

        mRecyclerView.setAdapter(mAdapter);

        mProgressBar.setVisibility(View.INVISIBLE);

    }

然后在 中,onBindViewHolder您可以查找在 中单击的项目的键mProductKeys。


查看完整回答
反对 回复 2023-03-31
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

好的,我尝试了不同的方法,只需添加一行即可完成。:) 无需添加ArrayList<String>。


    @Override

    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

        for (DataSnapshot postSnapShot : dataSnapshot.getChildren())

        {

            Product product = postSnapShot.getValue(Product.class);

            product.setpKey(postSnapShot.getKey());

            mProducts.add(product);

        }

        mAdapter = new ProductsAdapter(ProductsActivity.this, mProducts);

        mRecyclerView.setAdapter(mAdapter);

        mProgressBar.setVisibility(View.INVISIBLE);

    }

并添加String pKey到我的Product.classwith Setter and Getter。


查看完整回答
反对 回复 2023-03-31
  • 2 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信