如何在Firestore DB中的Android中获取文档ID或名称,以传递其他活动



我正在使用 FirestoreRecyclerAdapter

我能够获取文档的每个模型和属性。但是我想获得文档ID。

我尝试使用model. AutoSuggestions,但没有文档ID或名称

我有以下Dealsholder类。这在Kotlin。但是,其余的所有类都在Java中。

package com.guidoapps.firestorerecycleradaptersample

import com.google.firebase.firestore.IgnoreExtraProperties
@IgnoreExtraProperties
data class DealsResponse(var title:String? = null,
                var price:String? = null,
                var dealPrice:String? = null,
                var image:String? = null,
                var description: String? = null)

我在ongreate()

中初始化的以下功能
 private void getDealsList(){
        Query query = db.collection("deals").orderBy("dateTime", Query.Direction.DESCENDING);
        FirestoreRecyclerOptions<DealsResponse> response = new FirestoreRecyclerOptions.Builder<DealsResponse>()
                .setQuery(query, DealsResponse.class)
                .build();
        adapter = new FirestoreRecyclerAdapter<DealsResponse, MainActivity.DealsHolder>(response) {
            @Override
            public void onBindViewHolder(MainActivity.DealsHolder holder, int position, DealsResponse model) {
                progressBar.setVisibility(View.GONE);
                holder.textTitle.setText(model.getTitle());
                holder.textPrice.setText(model.getPrice());
                holder.textDesc.setText(model.getDescription());
                holder.textDealPrice.setText(model.getDealPrice());
                holder.textPrice.setPaintFlags(holder.textPrice.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
                Glide.with(getApplicationContext())
                        .load(model.getImage())
                        .into(holder.imageView);
                holder.itemView.setOnClickListener(v -> {
                    Snackbar.make(DealsList, model.getTitle(), Snackbar.LENGTH_LONG)
                            .setAction("Action", null).show();
                });
            }

在holder.itemview onclicklistener中,我想获得文档ID,以传递到另一个活动

然后是以下Dealsholder。

public class DealsHolder extends RecyclerView.ViewHolder {
    @BindView(R.id.title)
    TextView textTitle;
    @BindView(R.id.thumbnail)
    ImageView imageView;
    @BindView(R.id.description)
    TextView textDesc;
    @BindView(R.id.price)
    TextView textPrice;
    @BindView(R.id.dealPrice)
    TextView textDealPrice;
    public DealsHolder(View itemView) {
        super(itemView);
        ButterKnife.bind(this, itemView);
    }
}

使用适配器的getSnapshots()方法:

@Override
public void onBindViewHolder(MainActivity.DealsHolder holder, int position, DealsResponse model) {
    // ...
    holder.itemView.setOnClickListener(v -> {
        DocumentSnapshot snapshot = getSnapshots().getSnapshot(holder.getAdapterPosition());
        snapshot.getId();
        // ...
    }); 
}

getID()方法返回文档的ID,因此在collection/myDoc/someField中,myDoc是ID。

如果您知道下一个活动中的数据结构,则可以通过标准firestore.collection("foo").document("bar")方法重新创建该ID的引用。如果您正在寻找一般解决方案,我会使用getPath()一堆:

fun Bundle.putRef(ref: DocumentReference) = putString(REF_KEY, ref.path)
fun Bundle.getRef() = FirebaseFirestore.getInstance().document(getString(REF_KEY))

如果您想要模型中的ID,请使用自定义SnapshotParser

val options = FirestoreRecyclerOptions.Builder<DealsResponse>()
        .setQuery(query) {
            it.toObject(DealsResponse::class.java).apply { id = it.id }
        }
        .build()
public void onBindViewHolder(final GenericViewHolder holder, int position, FarmerModel model) {      
    DocumentReference ref = getItem(position).getReference();
    final String key = ref.getId();
    ....
}

相关内容

  • 没有找到相关文章

最新更新