0

My goal is to arrange my products by price, wherein the lowest price would be on top. Currently, the products are being arranged according to its create date. How do I achieve my goal? Thanks in advance.

SampleActivity.java

public class SampleActivity extends AppCompatActivity {

    private RecyclerView rec;
    private DatabaseReference dref;
    private Query dref2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sample);

        rec = (RecyclerView) findViewById(R.id.rec);
        rec.setHasFixedSize(true);
        rec.setLayoutManager(new LinearLayoutManager(this));

        String vegmeat_type = getIntent().getExtras().get("vegmeat_type").toString();
        dref = FirebaseDatabase.getInstance().getReference().child("Products");

        dref2 = dref.orderByChild("name").startAt(vegmeat_type).endAt(vegmeat_type);
    }

    public static class FeedViewHolder extends RecyclerView.ViewHolder{

        View mView;
        public FeedViewHolder(View itemView){
            super(itemView);
            mView = itemView;

        }
        public void setPrice(String Price){
            TextView price = (TextView) mView.findViewById(R.id.TVPrice);
            price.setText(Price);

        }

        public void setStallname(String StallName){
            TextView stallname = (TextView) mView.findViewById(R.id.TVStallName);
            stallname.setText(StallName);
        }



    }

    protected void onStart() {
        super.onStart();

        FirebaseRecyclerAdapter<prive, FeedViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<prive, FeedViewHolder>(
                prive.class,
                R.layout.row,
                FeedViewHolder.class,
                dref2

        ) {
            @Override
            protected void populateViewHolder(FeedViewHolder viewHolder, prive model, int position) {
                viewHolder.setPrice(model.getPrice());
                viewHolder.setStallname(model.getStallname());
            }
        };
        rec.setAdapter(firebaseRecyclerAdapter);
    }
}

Here's a screenshot from my database database

justlovly
  • 29
  • 1
  • 7

2 Answers2

0

You can use something like this:

angularFireDB: AngularFireDatabase;
yourProducts: AngularFireList<any>;
orderedProducts: Observable<any[]>;
this.yourProducts = this.angularFireDB.list('/products');
this.orderedProducts = this.yourProducts.valueChanges().map(res => res.sort((a, b) => a.price < b.price ? -1 : 1));

You need to use AngularFireDatabase class to get your database data.

james watt
  • 175
  • 1
  • 12
0

You need to do the following:

DatabaseReference ref=FirebaseDatabase.getInstance().getReference();
ref.child("Products").orderByChild("price");

more info here:

https://firebase.google.com/docs/database/android/lists-of-data#data-order

Peter Haddad
  • 78,874
  • 25
  • 140
  • 134
  • When I did that, the application would display every product, and still not arranging it by price :( Also, I need the startAt(vegmeat_type) and endAt.. for the system to get the specific product – justlovly Apr 18 '18 at 17:10
  • you cant use startAt(type) with orderByChild(price) – Peter Haddad Apr 18 '18 at 17:22