如何根据用户喜欢的项目动态更改回收器视图中的项目



我有一个带有饮料类别(7个项目)的回收器视图,我希望所有7个物品都根据客户的喜欢饮料保存在收藏夹中的客户最喜欢的饮料动态更改位置。

如何以这样的方式进行?

饮料类别表

收藏夹表

我当前的代码:

    private void loadMenu() {
    Query query = category.orderByChild("views");
    adapter = new FirebaseRecyclerAdapter<Category, MenuViewHolder>(
            Category.class,
            R.layout.menu_item,
            MenuViewHolder.class,
            query
    ) {
        @Override
        protected void populateViewHolder(final MenuViewHolder viewHolder, final Category model, int position) {
            viewHolder.txtMenuName.setText(model.getName());
            Picasso.with(getBaseContext()).load(model.getImage())
                    .into(viewHolder.imageView);
            viewHolder.txtViews.setText(model.getViews());
            viewHolder.setItemClickListener(new ItemClickListener() {
                @Override
                public void onClick(View view, int position, boolean isLongClick) {
                    //No of click
                    count++;
                    category.child(adapter.getRef(position).getKey()).child("views").setValue(count);
                    //Get CategoryId and send to new Activity
                    Intent drinkList = new Intent(Home.this, DrinkList.class);
                    //Because CategoryId is key, so we just get key of this item
                    drinkList.putExtra("CategoryId",adapter.getRef(position).getKey());
                    startActivity(drinkList);
                }
            });
        }
    };
    adapter.notifyDataSetChanged();
    recycler_menu.setAdapter(adapter);
}

如果我让您正确,您想基于字段订购类别,例如iS faste或用户喜欢该类别的数量,如果是这样。为了获得分类和过滤的结果,您必须将查询传递到FirebaseRecyclerAdapter构造函数中,现在您将在DatabaseReference中传递。因此,将构造函数添加到您的适配器中,该构造函数采用Query

public MyFireAdapterDiasFiestaRecyclerView(
    Class<DiaFiestaMeta> modelClass, 
    int modelLayout, 
    Class<MyFireViewHolder> viewHolderClass, 
    Query query) {
    ...

然后用订单和过滤器的查询调用:

adapter = new MyFireAdapterDiasFiestaRecyclerView(
   DiaFiestaMeta.class,
   layout_that_you_use,
   MyFireViewHolder.class,
   ref.orderByChild("property_to_sort_and_filter_on").equalTo("value_to_filter_on")
);

orderByChild()将按升序排序查询,如果您使用databaseReference填充firebaseRecyclerAdapter,则使用orderByChild()时使用此技巧的降低查询。

在FirebaseRecyclerAdapter声明中,像我们这样覆盖getItem()功能:

@Override
public User getItem(int position) {
        return super.getItem(getItemCount() - 1 - position);
}

参考:对FirebaseRecyclerAdapter进行分类

最新更新