我目前使用帶有 SQLite 資料庫的嵌套 RecyclerView。但是,我目前正在切換到 firebase,使用 Cloud Firestore 作為資料庫。
我的設定是:
- Firestore 資料庫設定為:用戶 -> 房屋 -> 房間 -> 任務
- 垂直 rv = 房間,水平 rv = 任務
- 一種用于垂直房車的模型,一種用于水平房車的模型
- 作為垂直房車,我正在使用 FirestoreRecyclerAdapter
- 在它的 onbindviewholder 里面我打電話:
DocumentSnapshot snapshot = getSnapshots().getSnapshot(verticalPosition);
String roomId = snapshot.getId();
- 使用 Id 排隊等待水平陣列串列(任務),該串列位于 Firestore 參考“房間”內:
if (currentUser != null) {
String userID = currentUser.getUid();
userRef = fdb.collection("users").document(userID);
houseRef = userRef.collection("houses").document("house0");
roomRef = houseRef.collection("rooms").document(roomId);
roomRef.get().addOnCompleteListener(tasksnap -> {
if (tasksnap.isSuccessful()) {
DocumentSnapshot document = tasksnap.getResult();
if (document.exists()) {
VerticalModel room = document.toObject(VerticalModel.class);
if (room != null) {
ArrayList<HorizontalModel> tasks = room.getArrayList();
hAdapter = new HorizontalRecyclerViewAdapter(context, new ArrayList<>(),
verticalPosition, listener, cleanInter);
holder.view.rvHorizontal.setHasFixedSize(true);
holder.view.rvHorizontal.setLayoutManager(new LinearLayoutManager(context,
LinearLayoutManager.HORIZONTAL, false));
holder.view.rvHorizontal.setAdapter(hAdapter);
holder.view.rvHorizontal.setNestedScrollingEnabled(false);
holder.updateContents(tasks, hAdapter);
}
}
}
});
}
我將切換到一個檔案來完成一項任務,而不是每個房間都有一個包含所有任務的陣列串列。
但是,我遇到了許多 Firestore 讀取呼叫,可能是因為 onbind 方法被呼叫了幾次。
因此,如果有任何專家:有更好的方法嗎?不幸的是,使用 2 個 Firestore 配接器對我不起作用。
也許可以強制firebase一直從本地快取中讀取,并且只有當用戶退出應用程式時,它才會更新更改?
uj5u.com熱心網友回復:
根據您的第一條評論:
讀取次數以及是否有更好的方法來實作第二個 rv
第二條評論:
免費用戶只能添加 5 個房間,每個房間有 5 個任務。付費用戶大多會增加大約 8 個房間,每個房間大約有 10 到 20 個任務。
我能想到的最簡單的選擇是在每個 Room 物件中使用一個陣列型別欄位,該欄位可以保存所有 Task 物件。由于它只存在幾個 Task 物件,因此您可以輕松地將它們添加到單個檔案中。這樣,您只需支付一次閱讀費用即可顯示房間以及所有任務。
如果您想知道如何將自定義物件陣列映射到 List,請閱讀以下文章:
- 如何將物件陣列從 Cloud Firestore 映射到物件串列?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/453350.html
