【问题标题】:How would you assign a RecyclerView object to a user favourite with Firebase Firestore?您如何使用 Firebase Firestore 将 RecyclerView 对象分配给用户最喜欢的对象?
【发布时间】: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();
    }
}

最诚挚的问候!

【问题讨论】:

  • 这段代码中到底有什么不符合您的预期?告诉我们共享代码有什么问题。你有什么错误吗?

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


【解决方案1】:

您可以在users模型/数据类/Pojo类中添加一个Favourite_Routes Array类型变量成员。

为了在 Favourite_Routes 数组中添加项目,创建另一个模型/数据类/Pojo 类。这是保存最喜欢的路线的数据。或者您可以简单地将 Route ID 存储在 Favourite_Routes 中。

使用保存的路线 ID,您可以根据需要为回收站视图实施 查询

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-09
    • 2018-04-03
    • 2014-10-19
    • 1970-01-01
    • 2011-01-03
    • 2020-03-16
    • 1970-01-01
    • 2020-12-15
    相关资源
    最近更新 更多