您如何使用 Firebase Firestore 将 RecyclerView 对象分配给用户最喜欢的对象?
Posted
技术标签:
【中文标题】您如何使用 Firebase Firestore 将 RecyclerView 对象分配给用户最喜欢的对象?【英文标题】:How would you assign a RecyclerView object to a user favourite with Firebase Firestore? 【发布时间】:2021-11-06 23:18:03 【问题描述】:我对 android 开发和整个 Firestore 还很陌生,我在项目中遇到了一个我找不到太多解决方案的障碍,所以我想知道是否可以寻求一些指导。
我正在制作一个 android 应用程序,用户可以在其中跟随或创建自己的远足,到目前为止,我将远足路线本身存储在填充 recyclerView 的 firestore 中,使用 firebase Auth 注册和登录的用户系统等,这些都在各自的收藏中,如下图,
(我无法发布图片,所以我只能发送链接) Users collection Routes collection
如果可能的话,我想要实现的目标是让用户拥有“最喜欢的路线”列表 理想情况下,您可以在回收站视图上按下一个按钮,将路线保存到他们的帐户中作为最爱,我是只是不确定如何处理这种实现。
回收站视图
public class RouteListerActivity extends AppCompatActivity
public RouteViewModel routeViewModel;
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference routeRef = db.collection("Routes");
private routeRvAdapter adapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_route_lister);
InitRecyclerView();
private void InitRecyclerView()
Query query = routeRef.orderBy("routeName", Query.Direction.DESCENDING);
FirestoreRecyclerOptions<Route> options = new FirestoreRecyclerOptions.Builder<Route>()
.setQuery(query, Route.class)
.build();
adapter = new routeRvAdapter(options);
RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
adapter.setOnItemClickListener(new routeRvAdapter.OnItemClickListener()
@Override
public void onItemClicked(DocumentSnapshot snapshot, int position)
Route route = snapshot.toObject(Route.class);
List<Point> listP = route.getRoutePoints();
Intent intent = new Intent(RouteListerActivity.this, RouteActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("Route", route);
intent.putExtras(bundle);
startActivity(intent);
);
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.LEFT
| ItemTouchHelper.RIGHT)
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target)
return false;
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction)
adapter.deleteRoute(viewHolder.getAbsoluteAdapterPosition());
Toast.makeText(RouteListerActivity.this, "Route Has Been Deleted.", Toast.LENGTH_SHORT).show();
).attachToRecyclerView(recyclerView);
@Override
protected void onStart()
super.onStart();
adapter.startListening();
@Override
protected void onStop()
super.onStop();
adapter.startListening();
最诚挚的问候!
【问题讨论】:
这段代码中到底有什么不符合您的预期?告诉我们共享代码有什么问题。你有什么错误吗? 【参考方案1】:您可以在users模型/数据类/Pojo类中添加一个Favourite_Routes Array类型变量成员。
为了在 Favourite_Routes 数组中添加项目,创建另一个模型/数据类/Pojo 类。这是保存最喜欢的路线的数据。或者您可以简单地将 Route ID 存储在 Favourite_Routes 中。
使用保存的路线 ID,您可以根据需要为回收站视图实施 查询。
【讨论】:
以上是关于您如何使用 Firebase Firestore 将 RecyclerView 对象分配给用户最喜欢的对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 上将具有自定义 ID 的文档添加到 Firebase (Firestore)
使用Firestore需要firebase-firestore.js文件吗?
您如何获取与 Firestore 中的 authUser 相关的用户数据库详细信息?