猿问

我想从 Firebase 获取产品 ID

我正在从 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;***

富国沪深
浏览 131回答 2
2回答

心有法竹

如果您尝试在position方法中确定项目的 Firebase 数据库 ID onBindViewHolder,则必须自己维护该映射。您可以通过从快照中提取getKey()和并保留它们的列表来轻松地做到这一点。getValue()onDataChange是这样的:mProductKeys = new ArrayList<String>();mDatabaseReference.addValueEventListener(new ValueEventListener() {&nbsp; &nbsp; @Override&nbsp; &nbsp; public void onDataChange(@NonNull DataSnapshot dataSnapshot) {&nbsp; &nbsp; &nbsp; &nbsp; for (DataSnapshot postSnapShot : dataSnapshot.getChildren())&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Product product = postSnapShot.getValue(Product.class);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mProducts.add(product);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mProductKeys.add(postSnapShot.getKey());&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; mAdapter = new ProductsAdapter(ProductsActivity.this, mProducts);&nbsp; &nbsp; &nbsp; &nbsp; mRecyclerView.setAdapter(mAdapter);&nbsp; &nbsp; &nbsp; &nbsp; mProgressBar.setVisibility(View.INVISIBLE);&nbsp; &nbsp; }然后在 中,onBindViewHolder您可以查找在 中单击的项目的键mProductKeys。

人到中年有点甜

好的,我尝试了不同的方法,只需添加一行即可完成。:) 无需添加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。
随时随地看视频慕课网APP

相关分类

Java
我要回答