Android Firebase - 根据微调器更改来自firebase的listview数据

时间:2018-03-11 14:40:58

标签: android listview firebase firebase-realtime-database

您好我正在尝试根据从微调器中选择的项目在列表视图中显示某些数据。 This is how the display page currently looks.它正在读取节点中的所有数据。因为在上面的微调器上选择了“Running”,所以我希望列表视图只显示Running。

这是我用来读取所有数据的代码。

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

        //reading data to listview, every time its saved
        currentUserDB2.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                cardiosList.clear();
                for(DataSnapshot cardioHistorySnapshot : dataSnapshot.getChildren()){

                    Cardio cardio = cardioHistorySnapshot.getValue(Cardio.class);

                    cardiosList.add(cardio);
                }

                CardioHistoryList adapter = new CardioHistoryList(Cardio_History.this, cardiosList);
                ListViewCardioHistory.setAdapter(adapter);

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

工作代码

spinnerCardioHistory.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                    String name = spinnerCardioHistory.getSelectedItem().toString();


                    currentUserDB2.orderByChild("detailCategory").equalTo(name).addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            cardiosList.clear();
                            for (DataSnapshot cardioHistorySnapshot : dataSnapshot.getChildren()){
                                Cardio cardio = cardioHistorySnapshot.getValue(Cardio.class);

                                cardiosList.add(cardio);
                            }
                            CardioHistoryList adapter = new CardioHistoryList(Cardio_History.this, cardiosList);
                            ListViewCardioHistory.setAdapter(adapter);
                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });
                }

                @Override
                public void onNothingSelected(AdapterView<?> adapterView) {

                }
            });

1 个答案:

答案 0 :(得分:1)

如果您只想显示单词Running,请执行以下操作:

 String text = spinner.getSelectedItem().toString();
 FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();
 DatabaseReference currentUserDB2=FirebaseDatabase.getInstance().getReference().child("Cardio").child(user.getUid());
 currentUserDB2.orderByChild("detailCategory").equalTo(text).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            cardiosList.clear();
            for(DataSnapshot cardioHistorySnapshot : dataSnapshot.getChildren()){

               String category=cardioHistorySnapshot.child("detailCategory").getValue().toString();
                cardiosList.add(category);
            }

            CardioHistoryList adapter = new CardioHistoryList(Cardio_History.this, cardiosList);
            ListViewCardioHistory.setAdapter(adapter);

首先,您将获得微调器String text = spinner.getSelectedItem().toString();

中的select texted

然后将其添加到查询orderByChild("detailCategory").equalTo(text)中,然后从数据库中检索,它只会添加在微调器中选择的单词“Running”。