使用firebase属性从recyclerview筛选元素

cs7cruho  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(272)

如果firebase数据库中存储的每个项目的属性为真,我正在寻找一种方法来过滤我的recyclerview上的项目。我一直在寻找一种方法来做它的适配器,但找不到一个。
例如,如果我有30种水果,我只想展示新鲜的。
在我的代码中,如果可能的话,我还想为它来自的活动更改这个条件。比如,如果我来自用户,我只想得到新鲜水果项目,但如果我来自管理,我想得到腐烂的水果。
这是我的适配器

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

n9vozmp41#

如果您的json有一个要过滤的属性,通常最好在数据库查询中进行过滤。例如,如果 ReclamoFirebase 你有财产吗 state 哪个是 fresh 对于新鲜农产品,您可以使用以下方法进行过滤:

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

在本例中,其余代码将保持不变。
有关这方面的更多信息,请参阅有关排序和筛选数据的firebase文档。

相关问题