【问题标题】:How to change item in recycler view dynamically based on user's favorite item如何根据用户最喜欢的项目动态更改回收站视图中的项目
【发布时间】:2017-12-10 16:47:25
【问题描述】:

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

这怎么可能?

Drink categories table

Favorites table

我当前的代码:

    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);
}

【问题讨论】:

  • 分享你的代码你尝试了什么?
  • 尊敬的先生,分享了我的代码,但真的不知道该怎么做

标签: android android-recyclerview


【解决方案1】:

如果我没听错的话,您想根据最喜欢的字段或用户喜欢该类别的程度来排序类别,如果是的话 要获得排序和过滤的结果,您必须将查询传递给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() 将按升序对查询进行排序,以便在使用 orderByChild() 时使用降序查询,如果您使用 DatabaseReference 填充 FirebaseRecyclerAdapter,请使用此技巧很好的解决方案,如下所示:

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

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

参考:Sort a FirebaseRecyclerAdapter

【讨论】:

  • 感谢您的及时回复,我会立即尝试,会尽快回复您
  • @SyahirahIsa 如果您对查询有任何疑问,这应该对您有所帮助! firebase.google.com/docs/reference/android/com/google/firebase/…
  • 我在 Category 中添加了一个新子项,每当单击回收站视图中的项目时,“views”等于 int count。我想按降序对项目进行排序。这是我的查询: Query query = category.orderByChild("views");但是,它按视图值的升序对我的项目进行排序
  • @SyahirahIsa 我已经更新了答案,让项目按降序排列。
  • 尊敬的先生,在过去的两个月里,我对编码很陌生。 FirebaseRecyclerAdapter 声明是什么意思?我该怎么做?我也更新了我上面的代码
猜你喜欢
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
相关资源
最近更新 更多