【问题标题】:Filter elements from Recyclerview with Firebase Attributes使用 Firebase 属性从 Recyclerview 过滤元素
【发布时间】:2020-12-19 15:32:21
【问题描述】:

如果为 firebase 数据库中的每个项目存储的属性为真,我正在寻找一种方法来过滤我的 recyclerview 上的项目。我一直在寻找一种在适配器上执行此操作的方法,但找不到。

例如,如果我有 30 个水果,我希望只显示新鲜的。

如果可能的话,深入了解我的代码,id 还希望根据它来自的活动更改此条件。比如我来自用户,我喜欢只得到新鲜水果,但如果我来自管理员,我喜欢得到腐烂的水果。

这是我的适配器

public class MisReclamoFirebaseAdapter extends RecyclerView.Adapter<MisReclamoFirebaseAdapter.MyViewHolder> {

    Context context;
    ArrayList<ReclamoFirebase> reclamos;

    public MisReclamoFirebaseAdapter(Context c , ArrayList<ReclamoFirebase> p)
    {
        context = c;
        reclamos = p;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.reclamo_item,parent,false));
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.descripcion.setText(reclamos.get(position).getDescripcion());
        holder.depto.setText(reclamos.get(position).getDept());
        holder.prodserv.setText(reclamos.get(position).getProducto());
        Picasso.get().load(reclamos.get(position).getFoto()).into(holder.fotoRec);
    }

    @Override
    public int getItemCount() {
        return reclamos.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder
    {
        TextView depto, descripcion, prodserv;
        ImageView fotoRec;
        public MyViewHolder(View itemView) {
            super(itemView);
            depto = (TextView) itemView.findViewById(R.id.deptoRec);
            descripcion = (TextView) itemView.findViewById(R.id.descripcionRec);
            prodserv= (TextView) itemView.findViewById(R.id.prodservRec);
            fotoRec = (ImageView) itemView.findViewById(R.id.fotoRec);
         }
    }
}

这就是类

public class HistorialReclamosActivity extends AppCompatActivity {
    private MisReclamoFirebaseAdapter adapter;
    DatabaseReference reference;
    RecyclerView recyclerView;
    ArrayList<ReclamoFirebase> list;
    FirebaseDatabase database = FirebaseDatabase.getInstance();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_historial_reclamos_consumidor);
        recyclerView = (RecyclerView) findViewById(R.id.recyclerViewMisReclamos);
        recyclerView.setLayoutManager( new LinearLayoutManager(this));
        reference = FirebaseDatabase.getInstance().getReference().child("Reclamos");
        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                list = new ArrayList<ReclamoFirebase>();
                for(DataSnapshot dataSnapshot1: dataSnapshot.getChildren())
                {
                    ReclamoFirebase p = dataSnapshot1.getValue(ReclamoFirebase.class);
                    list.add(p);
                }
                adapter = new MisReclamoFirebaseAdapter(HistorialReclamosActivity.this,list);
                recyclerView.setAdapter(adapter);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast.makeText(HistorialReclamosActivity.this, "Algo salió mal", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

【问题讨论】:

    标签: java android firebase-realtime-database android-recyclerview


    【解决方案1】:

    如果您的 JSON 具有您想要过滤的属性,通常最好在数据库查询中执行此操作。例如,如果对于每个ReclamoFirebase,您有一个属性state,即fresh 用于新鲜农产品,您可以使用以下内容进行过滤:

    reference = FirebaseDatabase.getInstance().getReference().child("Reclamos");
    Query query = reference.orderByChild("state").equalTo("fresh");
    query.addValueEventListener(new ValueEventListener() {
      ...
    

    在这种情况下,您的其余代码将保持不变。

    有关这方面的更多信息,请参阅 ordering and filtering data 上的 Firebase 文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-24
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多