【问题标题】:How to show a subСollection when navigating to a specific document in Firestore导航到 Firestore 中的特定文档时如何显示 subСollection
【发布时间】:2021-04-20 04:05:11
【问题描述】:

我在 Firestore 上有一个集合,里面有文档,它们显示在我的应用程序的 RecyclerView 中,我怎样才能使它在单击该文档时打开它的子​​集合?

当您单击文档时,会发生以下情况:

    private FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();
    private final CollectionReference collectionReference = firebaseFirestore.collection("Items");

    AdapterFactoryKeysSnap adapterFactoryKeysSnap;
    RecyclerView rv_keys_factory;
    RecyclerView.LayoutManager RLM_keys_factory;
    ProgressBar pb_keys_factory;

    private void RecyclerViewFactory() {
        Query query = collectionReference.orderBy("TurnKeyFactory", Query.Direction.DESCENDING);

        FirestoreRecyclerOptions<ItemKeys> firestoreRecyclerOptions = new FirestoreRecyclerOptions.Builder<ItemKeys>()
                .setQuery(query, ItemKeys.class).build();

        adapterFactoryKeysSnap = new AdapterFactoryKeysSnap((ClickKeysBlanc) getContext(), getContext(), firestoreRecyclerOptions);
        rv_keys_factory = requireView().findViewById(R.id.rv_keys_factory);
        RLM_keys_factory = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false);
        SnapHelper snapHelper = new GravitySnapHelper(Gravity.START);
        snapHelper.attachToRecyclerView(rv_keys_factory);
        rv_keys_factory.setHasFixedSize(false);
        rv_keys_factory.setLayoutManager(RLM_keys_factory);
        rv_keys_factory.setNestedScrollingEnabled(true);
        rv_keys_factory.setAdapter(adapterFactoryKeysSnap);
        adapterFactoryKeysSnap.startListening();
        pb_keys_factory = requireView().findViewById(R.id.pb_keys_factory);
        Objects.requireNonNull(rv_keys_factory.getAdapter()).setStateRestorationPolicy(RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY);
        pb_keys_factory.setVisibility(View.GONE);
    }

应用程序了解由于“TurnKeyFactory”而单击了哪个文档。在这个文档里面是一个名为“TheKeyOpens”的子集合。

我找到了一种方法来实现本文档中的构想,我写了以下内容

“工厂退出键(Factory)”--名称文件

    private final FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();
    private final CollectionReference collectionReference = firebaseFirestore.collection("Items").document("Factory exit key(Factory)").collection("TheKeyOpens");

整个问题是,在我写完这个之后,它出现在主集合的所有文档中,而不是在特定的选择中。

我认为如果我的应用程序通过“TurnKeyFactory”打开选定的文档,如果我这样写,它将起作用:

    private final FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();
    private final CollectionReference collectionReference = firebaseFirestore.collection("Items").document("TurnKeyFactory").collection("TheKeyOpens");

但是没有用。帮忙解决问题。

需要

Items->
    - Factory exit key(Factory)->
        - TheKeyOpens->
            -TheKeyOpens 1
            -TheKeyOpens 2
            -TheKeyOpens 3
    - TurnKeyFactory: “1”

    - Factory exit key(Customs)->
        - TheKeyOpens->
            -TheKeyOpens 1
            -TheKeyOpens 2
            -TheKeyOpens 3
    - TurnKeyFactory: “2”

【问题讨论】:

  • 请编辑您的问题并添加它的屏幕截图,而不是描述您的数据库的外观。
  • @AlexMamo 我添加了截图并更新了问题

标签: java android google-cloud-firestore android-recyclerview


【解决方案1】:

我认为如果我的应用程序通过“TurnKeyFactory”打开选定的文档,如果我这样写,它将起作用:

private final FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();
private final CollectionReference collectionReference = firebaseFirestore
    .collection("Items")
    .document("TurnKeyFactory")
    .collection("TheKeyOpens");

此引用不起作用,因为您将不正确的 ID 传递给 document() 方法。文档的 ID 应该是屏幕截图中的“Factory exit key(Factory)”而不是您实际添加的而不是“TurnKeyFactory”。为了使其工作,请使用以下参考:

private final CollectionReference collectionReference = firebaseFirestore
    .collection("Items")
    .document("Factory exit key(Factory)")
    .collection("TheKeyOpens");

【讨论】:

  • 我发现了一个类似的问题,他们解释的比我更清楚,整个问题是.document ()是动态的并且这个document的标识符已经设置,我需要去to` TurnTheKeyOpens` 打开一个名为“TheKeyOpens”的集合(如果存在)。 link
  • 是的,这就是我说的原因,你应该将你在数据库中的 ID 添加到 document() 方法中。
猜你喜欢
  • 2021-07-12
  • 2020-10-05
  • 1970-01-01
  • 2020-03-13
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 2019-09-16
相关资源
最近更新 更多